为 UITextField 设置委托时应用程序崩溃
Posted
技术标签:
【中文标题】为 UITextField 设置委托时应用程序崩溃【英文标题】:App crashes when setting delegate for UITextField 【发布时间】:2012-07-10 08:49:07 【问题描述】:我有一个应用程序,它的表格视图从一个名为“NameCell”的类中实例化单元格对象,该类有一个名为“NameCellView.xib”的 nib 文件(Name Cell 是 NameCellView 的类)。在 NameCellView.xib 视图控制器中有一个名为“NameField”的 UITextField。现在我尝试将 UITextField 的(NameField)委托设置为文件所有者(例如单元格的类 = NameCell)。但是当我这样做时,应用程序会在我尝试与文本字段交互时立即崩溃(例如,当我点击它时),我得到的唯一消息是“(lldb)”,并且以下行在 main.m 中以绿色突出显示应用文件:
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
关于为什么会发生这种情况以及如何解决它的任何想法?当用户点击“返回”键时,我要做的就是关闭键盘,所以如果你有更好的方法来做到这一点而无需授权,我会全力以赴!
非常感谢您的帮助!任何评论都非常感谢!
【问题讨论】:
【参考方案1】:根据描述,事情还不清楚。但请检查 xib 中的连接。我认为问题出在 xib 连接中
【讨论】:
连接只是将“代表”从连接菜单拖到“文件所有者”的简单连接。而且我还没有添加任何代码 请检查所有连接。 当我查看 UITextFields 连接检查器时会出现委托连接,但是当我查看具有所有其他连接的视图连接检查器时,我看不到它。有问题吗? 在引用 Outlets 下应该会出现。如果不只是从那里拖到文件所有者。 它没有,我不能将引用出口拖到文件的所有者【参考方案2】:如果您愿意使用其他方式来关闭键盘,您可以添加一个“完成”按钮,点击该按钮时会调用“hideKeyboard”方法。
您将此按钮添加到键盘附件视图(基本上是一个简单的 UIToolBar,并进行了一些自定义以使其看起来不错)。
我不知道如何使用 Interface Builder 执行此操作,但我知道如何使用纯代码执行此操作:
// setup done button accessory view for keyboard
UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
[toolBar setBarStyle:UIBarStyleBlackTranslucent];
UIButton *btnDone = [[UIButton alloc] initWithFrame:CGRectMake(20, 8, 65, 30)];
[btnDone setTitle:@"Done" forState:UIControlStateNormal];
btnDone.titleLabel.font = [UIFont fontWithName:@"Arial-BoldMT" size:14];
btnDone.backgroundColor = [UIColor darkGrayColor];
btnDone.layer.cornerRadius = 5.0;
btnDone.tintColor = [UIColor darkGrayColor];
[btnDone addTarget:self action:@selector(hideKeyboard) forControlEvents:UIControlEventTouchUpInside];
[toolBar addSubview:btnDone];
[btnDone release];
// -------------------------------------------------------------------
// let your text field's keyboard know about the accessory view
// -------------------------------------------------------------------
myTextField.inputAccessoryView = toolBar;
...
// Hide Keyboard Method
-(void)hideKeyboard
[myTextField resignFirstResponder];
这将在键盘上方添加一个自定义视图,以便您可以按“完成”按钮隐藏键盘。
【讨论】:
以上是关于为 UITextField 设置委托时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
iphone:uitextfield,具有相同委托的多个文本字段?
如果将键盘设置为特定语言并将继续作为返回键,则 UITextField 会使应用程序崩溃