Ich würde gerne die Text eines UITextField
.
Ist dies möglich?
Ich würde gerne die Text eines UITextField
.
Ist dies möglich?
Wenn Sie eine freie Taste haben, wird die akzeptierte Antwort für Sie nicht funktionieren. Wir sollten uns auch davor hüten, dass Apple in Zukunft Dinge ändert, indem wir super
.
Um also sicherzustellen, dass der Text die Schaltfläche "Löschen" nicht überlappt, holen wir uns den "Standardwert" von super
und dann nach Bedarf anpassen.
Dieser Code fügt oben, links und unten im Textfeld einen 10-Px-Einsatz ein:
@interface InsetTextField : UITextField
@end
@implementation InsetTextField
// Placeholder position
- (CGRect)textRectForBounds:(CGRect)bounds {
CGRect rect = [super textRectForBounds:bounds];
UIEdgeInsets insets = UIEdgeInsetsMake(10, 10, 10, 0);
return UIEdgeInsetsInsetRect(rect, insets);
}
// Text position
- (CGRect)editingRectForBounds:(CGRect)bounds {
CGRect rect = [super editingRectForBounds:bounds];
UIEdgeInsets insets = UIEdgeInsetsMake(10, 10, 10, 0);
return UIEdgeInsetsInsetRect(rect, insets);
}
// Clear button position
- (CGRect)clearButtonRectForBounds:(CGRect)bounds {
CGRect rect = [super clearButtonRectForBounds:bounds];
return CGRectOffset(rect, -5, 0);
}
@end
Hinweis: UIEdgeInsetsMake nimmt Parameter in dieser Reihenfolge entgegen: top , links , unten , rechts .
Verwendung von textRectForBounds:
y editingRectForBounds:
Methoden ohne clearButtonRectForBounds:
unter iOS 7+ hat bei mir funktioniert.
clearButtonRectForBounds:
hilft nur, den Löschknopf ein wenig nach links zu schieben. Vielleicht möchten Sie sie weglassen. Mein Textfeld hatte einen dunklen Hintergrund, und die Schaltfläche "Löschen" brauchte ein bisschen mehr Platz auf der rechten Seite.
Seltsamerweise wirkt sich dies auf die Bildlaufleistung aus (zumindest unter iOS 12), wenn der Text das sichtbare Rechteck übersteigt. Mit einem Einschub von 15 hält es sogar scrollen.
Ich dachte, ich würde eine schnelle Lösung anbieten
import UIKit
class TextField: UITextField {
let inset: CGFloat = 10
// placeholder position
override func textRectForBounds(bounds: CGRect) -> CGRect {
return CGRectInset(bounds , inset , inset)
}
// text position
override func editingRectForBounds(bounds: CGRect) -> CGRect {
return CGRectInset(bounds , inset , inset)
}
override func placeholderRectForBounds(bounds: CGRect) -> CGRect {
return CGRectInset(bounds, inset, inset)
}
}
Mauersegler 3+
import UIKit
class TextField: UITextField {
let inset: CGFloat = 10
// placeholder position
override func textRect(forBounds: CGRect) -> CGRect {
return forBounds.insetBy(dx: self.inset , dy: self.inset)
}
// text position
override func editingRect(forBounds: CGRect) -> CGRect {
return forBounds.insetBy(dx: self.inset , dy: self.inset)
}
override func placeholderRect(forBounds: CGRect) -> CGRect {
return forBounds.insetBy(dx: self.inset, dy: self.inset)
}
}
Vergessen Sie nicht override func placeholderRectForBounds(bounds: CGRect) -> CGRect { return CGRectInset(bounds, inset, inset) }
In iOS 11 zumindest, wenn Sie überschreiben textRectForBounds
ist auch der Platzhalter betroffen - durch Hinzufügen der Platzhalterüberschreibung wird der Platzhalter also um weitere 10pt verschoben. Wenn das ist, was Sie suchen, aber wenn nicht, es ist gut, bewusst zu sein.
Schnell
class TextField: UITextField {
let inset: CGFloat = 8
// placeholder position
override func textRect(forBounds bounds: CGRect) -> CGRect {
return bounds.insetBy(dx: inset, dy: inset)
}
// text position
override func editingRect(forBounds bounds: CGRect) -> CGRect {
return bounds.insetBy(dx: inset, dy: inset)
}
}
Sie können den Texteinschub für UITextField festlegen, indem Sie die leftView.
Zum Beispiel so:
UITextField *yourTextField = [[UITextField alloc] init];
UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 5)];
leftView.backgroundColor = [UIColor clearColor];
yourTextField.leftViewMode = UITextFieldViewModeAlways;
yourTextField.leftView = leftView;
Wenn Sie auch die linke Ansicht für ein Symbol verwenden müssen, kann dies nicht funktionieren
@Reaper diese Methode funktioniert auch für ein Bild. Fügen Sie die gewünschte Menge an Padding zur Breite des Bildrahmens hinzu und setzen Sie contentmode auf center. imageView.contentMode = UIViewContentMode.Center imageView.frame = CGRectMake(0.0, 0.0, imageView.image!.size.width + 16.0, imageView.image!.size.height)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
1 Stimmen
stackoverflow.com/questions/7565645/