Ich würde gerne die Text eines UITextField
.
Ist dies möglich?
Ich würde gerne die Text eines UITextField
.
Ist dies möglich?
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)
Ein guter Ansatz, um UITextField eine Auffüllung hinzuzufügen, ist die Unterklasse UITextField und das Hinzufügen einer Eigenschaft edgeInsets. Sie setzen dann die edgeInsets und das UITextField wird entsprechend gezeichnet. Dies funktioniert auch korrekt mit einem benutzerdefinierten leftView oder rightView Satz.
OSTextField.h
#import <UIKit/UIKit.h>
@interface OSTextField : UITextField
@property (nonatomic, assign) UIEdgeInsets edgeInsets;
@end
OSTextField.m
#import "OSTextField.h"
@implementation OSTextField
- (id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
self.edgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
}
return self;
}
-(id)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if(self){
self.edgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
}
return self;
}
- (CGRect)textRectForBounds:(CGRect)bounds {
return [super textRectForBounds:UIEdgeInsetsInsetRect(bounds, self.edgeInsets)];
}
- (CGRect)editingRectForBounds:(CGRect)bounds {
return [super editingRectForBounds:UIEdgeInsetsInsetRect(bounds, self.edgeInsets)];
}
@end
Swift 5 Version von Christophs Antwort mit extra Anwendungsbeispiel
import UIKit
private class InsetTextField: UITextField {
var insets: UIEdgeInsets
init(insets: UIEdgeInsets) {
self.insets = insets
super.init(frame: .zero)
}
required init(coder aDecoder: NSCoder) {
fatalError("not intended for use from a NIB")
}
// placeholder position
override func textRect(forBounds bounds: CGRect) -> CGRect {
return super.textRect(forBounds: bounds.inset(by: insets))
}
// text position
override func editingRect(forBounds bounds: CGRect) -> CGRect {
return super.editingRect(forBounds: bounds.inset(by: insets))
}
}
extension UITextField {
class func textFieldWithInsets(insets: UIEdgeInsets) -> UITextField {
return InsetTextField(insets: insets)
}
}
Verwendung: -
class ViewController: UIViewController {
private let passwordTextField: UITextField = {
let textField = UITextField.textFieldWithInsets(insets: UIEdgeInsets(top: 10, left: 15, bottom: 10, right: 15))
// ---
return textField
}()
}
Abgesehen davon, dass `get{}` für nur über Getter berechnete Eigenschaften nicht erforderlich ist, benötigen Sie in Swift 5 keine Return-Anweisung für 1-Zeiler, so dass Sie den Anwendungsfall ein wenig straffen können: let passwordTextField = { UITextField.textFieldWithInsets(insets: UIEdgeInsets(top:0, left:5, bottom:0, right:15)) }()
Das funktioniert übrigens hervorragend, und es ist ein interessanter Ansatz. Gemischte Gefühle über die Verschleierung durch das Hinzufügen der Erweiterung aber. Nicht sicher, warum nicht einfach lassen Sie die Klasse öffentlich sein und machen Sie es klar, dass Sie eine Unterklasse von UITextField instanziieren, wo Sie es verwenden.
Swift 4.2 Version:
import UIKit
class InsetTextField: UITextField {
let inset: CGFloat = 10
override func textRect(forBounds bounds: CGRect) -> CGRect {
return bounds.insetBy(dx: inset, dy: inset)
}
override func editingRect(forBounds bounds: CGRect) -> CGRect {
return bounds.insetBy(dx: inset, dy: inset)
}
override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
return bounds.insetBy(dx: inset, dy: inset)
}
}
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/