为 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 设置委托时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

自定义表格单元格的uitextfield

iphone:uitextfield,具有相同委托的多个文本字段?

如果将键盘设置为特定语言并将继续作为返回键,则 UITextField 会使应用程序崩溃

可以将静态类设置为 UItextfield (Objective C) 的委托吗?

尝试设置委托时崩溃 - FBLoginView

哪个 UITextField 委托方法将被调用而无需重新设置键盘?