我找不到我的问题的解决方案,因为stackOverflow上的所有其他帖子都引用了使用IDE创建的UITextField而不是以编程方式创建。
我在UITextField
内创建了一个自定义(void)viewDidLoad
。我以编程方式创建了这个,因此我可以访问leftView
属性。
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 66, screenAdj, 30)];
textField.borderStyle = UITextBorderStyleRoundedRect;
textField.font=[UIFont fontWithName:@"Helvetica" size:14];
textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
textField.returnKeyType = UIReturnKeyDone;
textField.clearButtonMode = UITextFieldViewModeWhileEditing;
[textField addTarget:self action:@selector(textFieldShouldReturn:)forControlEvents:UIControlEventEditingDidEndOnExit];
textField.text=[defaults stringForKey:@"username"];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 40)];
label.font=[UIFont fontWithName:@"Helvetica" size:14];
label.text = @"Your name";
label.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.0];
textField.leftViewMode = UITextFieldViewModeAlways;
textField.leftView = label;
我还想限制TextField实现中的最大字符:
- (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger oldLength = [textField.text length];
NSUInteger replacementLength = [string length];
NSUInteger rangeLength = range.length;
NSUInteger newLength = oldLength - rangeLength + replacementLength;
BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound;
return newLength <= MAX_LENGTH_USERNAME || returnKey;
}
但是我意识到我的textField没有“看到”上面的功能。与
结合[textField addTarget:self action:@selector(...
但没有运气。 有什么帮助吗?
答案 0 :(得分:2)
您必须告诉视图控制器符合UITextFields委托协议。在您的(.h)中,在“UIViewController”之后添加<UITextFieldDelegate>
,当您设置文本字段时,将其委托设置为self
:
[textField setDelegate:self];
然后你可以继续删除这一行
[textField addTarget:self action:@selector(...
假设您使用此号码致电shouldChangeCharactersInRange
。现在您已经设置了委托,将自动调用此方法。