我如何告诉我的UITextField(代码)辞职第一响应者?

时间:2011-09-20 18:54:46

标签: xcode macos cocoa

我已经通过代码创建了我的UITextField,没有InterfaceBuilder。当按下“完成”按钮时,我希望键盘消失。代码如何知道我正在参与UITextField而不是其他的


首先,非常感谢。

我的代码是这样的:

-(void)viewDidLoad {
    [super viewDidLoad];
    field = [[UITextField alloc] initWithFrame:CGRectMake(30, 100, 185, 30)];
    field.adjustsFontSizeToFitWidth = YES;
    field.textColor = [UIColor blackColor];
    field.placeholder = @"Text";
    field.keyboardType = UIKeyboardTypeDefault;
    field.returnKeyType = UIReturnKeyDone;
    field.backgroundColor = [UIColor blueColor];
    field.delegate = self;
    [self.view addSubview:field];
} 

......

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];

}

使用此代码,我按下完成按钮,没有任何反应。就像你怎么说?

编辑:

我创建了两个UITextField,我是如何处理前一个的。但是现在,对于每一行,我都这样做:

 if ([indexPath row] == 0) {
     [cell.contentView addSubview:pTextField];
 }
 else {
     [cell.contentView addSubview:pTextField];
 }

因此,使用此代码,程序收到信号“EXC_BAD_ACCESS”。知道为什么会这样吗?

3 个答案:

答案 0 :(得分:2)

  

代码如何知道我正在参与UITextField而不是其他人

您的textFieldShouldReturn:方法的textField参数将始终是当前有效的文本字段。

该方法必须返回BOOL,您应该按原样获取编译器警告。试试

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

请注意,您当前也在添加文本字段的方式中泄漏内存。您应该根据WrightCS的答案将其设置为属性,以便稍后可以参考。所以在viewDidLoad

的最后
self.myTextField = field;
[field release];

答案 1 :(得分:0)

在标题中定义textField,然后您可以使用以下内容:

·H

@interface MyeViewController : UIViewController <UITextFieldDelegate>
{
    UITextField * myTextField;
}
@end

的.m

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [myTextField resignFirstResponder];

    /* textField here is referenced from 
       textFieldShouldReturn:(UITextField *)textField 
     */
}

答案 2 :(得分:0)

确保将以编程方式创建的delegate的{​​{1}}设置为UITextField(创建对象的视图控制器)并实施相应的self方法(我认为它的UITextFieldDelegate)并在传递给委托方法的textField参数上调用该方法textFieldShouldReturn:。这将是你的UITextField。