- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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
的单元格尚未绘制。一旦我切换到ON
,UITextField
就会在第二个单元格中绘制并成为第一响应者。如果我再次切换 OFF
和 ON
,我的日志仍然显示“完成重新加载”,但 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/
如果我目前没有与应用程序进行任何交互(没有选择文本字段等...),是否还有第一响应者对象?正如我测试的那样,如果我向响应者链发送一条消息,那么当前的 ViewController.view 会收到它,
这个问题在这里已经有了答案: first responder is not being set correctly (2 个答案) 已关闭10 年前。
我创建了一个应用程序,在 ViewController.m 和 viewDidLoad 中,我编写了以下代码 for (UIView* v in self.view.subviews){
我正在尝试让摇动手势起作用。这是一些代码 在我的实现文件中 - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
对于我的自定义单元格,举个简单的例子,我只有一个 UITextField,有没有办法让 刚刚插入的单元格 becomeFirstResponder insertRowsAtIndexPaths ? 我
我需要跟踪哪个文本字段是我的自定义键盘工作的 firstResponder。在下面的代码中,我大大简化了我的程序,但这是问题的要点: @implementation SimplePickerViewC
我在让文本字段接受 becomeFirstResponder 指令时遇到问题。 我提供了一种自定义机制来在导航栏中创建标题。我有另一个 View Controller 成功地使用了同样的技术。在 vi
为什么我的 InterfaceBuilder 文件中的 FirstResponder 缺少 redo: 连接(在 Received Actions 列表中)? undo: 存在,但 redo: 不存在
你知道(你能看到)为什么我不能退出 FirstResponder 并隐藏键盘吗? 仅供引用:Xcode 9 import UIKit class ViewController: UIViewContr
所以我正在制作一个应用程序,但在从 UISearchBar 和 UITextFields 中关闭键盘时遇到了一些问题。这是我的应用程序的结构: NavigationController -> View
我正在开发一个具有主窗口和多个面板窗口的 Cocoa 应用程序。 当用户通过单击主窗口等离开文本字段时,我需要在 NSTextField(位于面板窗口上)上自动保存一些文本。到目前为止,我已经尝试通过
我有一个 UITextView。我实现了一个导航栏 UIBarButtonItem 来响应触摸并为我的 UITextView 退出 firstResponder。 但是,当调用选择器方法时,键盘不会消
我在 tableviewcontroller 中设置了一个 searchBar。我引用了这个类似的问题 UISearchBar cannot become first responder after
我有一个 Mac 应用程序,它由一个窗口组成,其中包含数量可变的 Pane ,每个 Pane 都包含一个表格 View 。该窗口有一个带有按钮的工具栏,我希望当前选定 Pane 的 VC 能够处理验证
在viewDidLoad()中: searchController = UISearchController(searchResultsController: nil) let cancelButto
我有一个名为 songInfoView 的 View ,其中包含 3 个 UITextFields 和一个 UIButton。我在父 View 中创建一个临时 UITextField 以调出键盘并将
我知道这个问题可能有很多关于 SO 的答案。但是在尝试了在互联网上找到的所有解决方案之后(加上我的一些自定义发明..)我仍然无法实现我想要实现的目标。 故事是这样的: 我有一个 UICollectio
我有四个 UITextField,每个代表 OTP 的一个数字。我希望控件在用户输入代码时转移到连续的文本字段。我的实现如下。 extension FillSignUpCodeController:
我有 UIViewController 并为其 View 创建了自定义类。顺便说一句,我在该类中重新定义了方法“canBecomeFirstResponder”,因此它始终返回 true。当调用 vi
我使用以下代码修改框架大小以适应显示/消失的键盘: - (void)moveCodeViewForKeyboard:(NSNotification*)aNotification up:(BOOL)up
我是一名优秀的程序员,十分优秀!