我已经通过代码创建了我的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”。知道为什么会这样吗?
答案 0 :(得分:2)
代码如何知道我正在参与UITextField而不是其他人
您的textFieldShouldReturn:
方法的textField
参数将始终是当前有效的文本字段。
该方法必须返回BOOL
,您应该按原样获取编译器警告。试试
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
请注意,您当前也在添加文本字段的方式中泄漏内存。您应该根据WrightCS的答案将其设置为属性,以便稍后可以参考。所以在viewDidLoad
:
self.myTextField = field;
[field release];
答案 1 :(得分:0)
在标题中定义textField,然后您可以使用以下内容:
@interface MyeViewController : UIViewController <UITextFieldDelegate>
{
UITextField * myTextField;
}
@end
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[myTextField resignFirstResponder];
/* textField here is referenced from
textFieldShouldReturn:(UITextField *)textField
*/
}
答案 2 :(得分:0)
确保将以编程方式创建的delegate
的{{1}}设置为UITextField
(创建对象的视图控制器)并实施相应的self
方法(我认为它的UITextFieldDelegate
)并在传递给委托方法的textField参数上调用该方法textFieldShouldReturn:
。这将是你的UITextField。