为什么我的UITextField委托方法没有被调用?

时间:2014-01-30 18:41:43

标签: ios objective-c text delegates uitextfield

这是我的问题。我创建了一个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检查)。有人可以帮忙吗?

4 个答案:

答案 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)

  1. 您可以为emailTextField设置委托,但在创建UITextField时设置textField。如果你将emailTextField @synthesize改为textField,这可能会有效。

  2. 假设您在emailTextFiled和textField之间进行了@synthesize,或者您将emailTextField更改为textField,则在创建对象之前设置委托。您需要移动设置委托,直到您调用setTextFields:

答案 2 :(得分:0)

有几个问题:

您在实际创建UITextField之前设置了委托。

当您在UITextField方法中创建setTextFields:时,您永远不会将其分配给您的财产。您所做的只是将nil传递给您的方法,当您为方法中的变量赋值时,您只需在该方法的上下文中进行分配。它没有返回并设置属性。

答案 3 :(得分:0)

可能是InterfaceBuilder构建视图的方式。

在应用程序启动时尝试[MyTextFieldDelegate new]。 当您的视图从NIB中唤醒时,您的课程将被注册并正确绑定到字段。