gpt4 book ai didi

iphone - resignFirstResponder 上的 UITextField 奇怪行为

转载 作者:行者123 更新时间:2023-11-28 18:43:25 24 4
gpt4 key购买 nike

已经是第二天了,还没弄清楚问题,

我有 UITabelView 和自定义 UICellViews,每个自定义 UICellView 都由 UILabelUITextField 组成

自定义 UICellView 对象在其 init 方法中分配 UITextFieldUILabel 并在 dealloc 中释放

UITableView中自定义UICellViews个数为6个。

用户场景如下

  • 当用户点击 1 到 5 UITextFields 时,虚拟键盘打开,用户输入一些文本
  • 当用户点击第 6 个 UITextField 时,如果虚拟键盘处于事件状态,则应将其隐藏,如果隐藏则不显示。

在我的 UIViewController 类中实现 UITextFieldDelegate 协议(protocol),并将每个 UITextField 的委托(delegate)设置为自己。

我的委托(delegate)方法如下

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if (textField.tag != 6) {
return YES;
} else {
[textField resignFirstResponder];
return NO;
}
}

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

-(void) textFieldDidBeginEditing:(UITextField *)textField {
/* Some code */
}

-(void) textFieldDidEndEditing:(UITextField *)textField
{
[textField resignFirstResponder];
}

所有功能正常!

所以现在,虚拟键盘永远不会被隐藏,为什么会这样?

附言。类似代码在 iPhone 上有效,但在 iPad 上存在此问题。

最佳答案

您需要知道上次使用的是哪个文本字段!所以你可以做 [lastUsedTextField resignFirstResponder]

有一个肮脏但有效的技巧..您可以使您的文本字段成为新的事件 UITextField 并在下一个周期立即调用 resignFirstResponder:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if (textField.tag != 6) {
return YES;
} else {
// this will schedule keyboard dismissal for the current text field
dispatch_async(dispatch_get_main_queue(), ^{
[textField resignFirstResponder];
});
return YES; // -> make this one active
}
}

关于iphone - resignFirstResponder 上的 UITextField 奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8396862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com