gpt4 book ai didi

ios - UITableView 单元格中的 UITextField 以编程方式成为FirstResponder

转载 作者:行者123 更新时间:2023-12-02 08:58:02 25 4
gpt4 key购买 nike

我有一个 UITextField,其原型(prototype)单元格内有一个标签。当构建 UITableView 并打开上面单元格中的 UISwitch 时,UITextField 设置为第一响应者。如果应用程序从头开始或关闭并重新启动,则此方法有效。一旦加载,[tableView reloadData] 就不会再触发 becomeFirstResponder

如果 UITextField 通过稍后触摸文本字段成为第一响应者,我可以使用按钮、弹出窗口等触发 becomeFirstResponder 事件。但我的交换机不再这样了。

有什么建议可以告诉我我可以尝试什么吗?

目前,我使用didSelectRowAtIndexPath方法来触发弹出窗口。一个很好的副作用是,当我拉出数字键盘时,我可以在弹出窗口中提供“确定”和“取消”按钮,而不必摆弄键盘上的单独按钮。但这显然是一种解决方法。

这就是我在构建UITableView时调用firstresponder的方式(每次应用程序从头开始启动时都会起作用):

if ([settings doubleForKey:@"limitDouble"]==0 && [settings boolForKey:@"limitBool"]==YES) {
[dailyLimitEntry becomeFirstResponder];
}

dailyLimitEntry 是一个 UITextField,它很强大,因此它会一直存在。

只是为了好玩,我添加了一个按钮并将其连接到我的代码,如下所示:

UITextField *tmp = (UITextField *)[self.view viewWithTag:35];
[tmp becomeFirstResponder];

这也有效。当我将它与开关一起使用时,只有当应用程序新加载到内存中时才会调用它。否则,我的 UITextField 不会响应开关。

在第一条评论之后,我找到了一个方法来检查 UITableView 是否已完成重新加载

-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if([indexPath row] == ((NSIndexPath*)[[settingsTableView indexPathsForVisibleRows] lastObject]).row){
//end of loading
//for example [activityIndicator stopAnimating];
NSLog(@"finished reload");
NSLog(@"%@",dailyLimitEntry);
if ([settings boolForKey:@"limitBool"]==YES) {
UITextField *tmp = (UITextField *)[self.view viewWithTag:35];
[tmp becomeFirstResponder];
}
}
}

有趣的是,成为第一响应者仅在应用程序加载后第一次使用开关时触发。最初,开关关闭。因此包含 UITextField 的单元格尚未绘制。一旦我切换到ONUITextField就会在第二个单元格中绘制并成为第一响应者。如果我再次切换 OFFON,我的日志仍然显示“完成重新加载”,但 UITextField 不会成为第一响应者。这让我发疯......必须与应用程序的生命周期有关。

最佳答案

检查单元格的类,而不是检查索引路径。

以下是我为空白标题单元格调出键盘的方法(当我创建新项目时):

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([cell isKindOfClass:[FDSSampleTitleCell class]]) {
FDSSampleTitleCell *titleCell = (FDSSampleTitleCell *)cell;
if (titleCell.titleField.text.length == 0) {
[titleCell.titleField becomeFirstResponder];
}
}
}

关于ios - UITableView 单元格中的 UITextField 以编程方式成为FirstResponder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12964897/

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