这是我的问题。我创建了一个UITextField。
.h文件:
@property (strong, nonatomic) UITextField *emailTextField;
.m文件:
- (void)viewDidLoad
{
[super viewDidLoad];
self.emailTextField.delegate=self;
[self setTextFields:120 :@" email" :self.emailTextField];
}
-(void)setTextFields:(float)ycoord :(NSString *)text :(UITextField *)textField
{
CGRect frame = CGRectMake(60, ycoord, 180, 30);
textField = [[UITextField alloc]initWithFrame:frame];
textField.backgroundColor = [UIColor whiteColor];
textField.placeholder = text;
textField.font = [UIFont fontWithName:@"Baskerville" size:15];
textField.allowsEditingTextAttributes=YES;
textField.autocorrectionType = UITextAutocorrectionTypeNo;
CALayer *lay = [textField layer];
[lay setCornerRadius:5.0f];
[self.view addSubview:textField];
}
目的是保存用户放在TextField中的文本。我尝试了委托方法
-(void)textFieldDidEndEditing:(UITextField *)textField
但是没有调用该方法(我把一个NSLog检查)。有人可以帮忙吗?
答案 0 :(得分:5)
- (void)viewDidLoad
{
[super viewDidLoad];
self.emailTextField= [self setTextFields:120 :@" email"];
self.emailTextField.delegate=self;
self.passwordTextField= [self setTextFields:200 :@" password"];
self.passwordTextField.delegate=self;
self.nameTextField= [self setTextFields:250 :@" name"];
self.nameTextField.delegate=self;
}
-(UITextField *)setTextFields:(float)ycoord :(NSString *)text{
CGRect frame = CGRectMake(60, ycoord, 180, 30);
UITextField* textField = [[UITextField alloc]initWithFrame:frame];
textField.backgroundColor = [UIColor whiteColor];
textField.placeholder = text;
textField.font = [UIFont fontWithName:@"Baskerville" size:15];
textField.allowsEditingTextAttributes=YES;
textField.autocorrectionType = UITextAutocorrectionTypeNo;
CALayer *lay = [textField layer];
[lay setCornerRadius:5.0f];
[self.view addSubview:textField];
return textField;
}
答案 1 :(得分:0)
您可以为emailTextField设置委托,但在创建UITextField时设置textField。如果你将emailTextField @synthesize改为textField,这可能会有效。
假设您在emailTextFiled和textField之间进行了@synthesize,或者您将emailTextField更改为textField,则在创建对象之前设置委托。您需要移动设置委托,直到您调用setTextFields:
答案 2 :(得分:0)
有几个问题:
您在实际创建UITextField
之前设置了委托。
当您在UITextField
方法中创建setTextFields:
时,您永远不会将其分配给您的财产。您所做的只是将nil
传递给您的方法,当您为方法中的变量赋值时,您只需在该方法的上下文中进行分配。它没有返回并设置属性。
答案 3 :(得分:0)
可能是InterfaceBuilder构建视图的方式。
在应用程序启动时尝试[MyTextFieldDelegate new]。 当您的视图从NIB中唤醒时,您的课程将被注册并正确绑定到字段。