gpt4 book ai didi

objective-c - 使自定义 UIView 成为自定义 UITableViewCell 中的第一响应者

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:50:37 26 4
gpt4 key购买 nike

我有三个 UITableViewCell 子类。我在 View Controller 的 TableView 中显示这些。我在 View Controller 中为 tableView:willSelectRowAtIndexPath: 返回 nil:因为我希望我的两个 UITableViewCell 子类中的 UITextFields 获得焦点并成为第一响应者。

对于第三个 UITableViewCell 子类,我有一个包含 UIWebView 的自定义 UIView 子类。目前在 UIWebView 中加载的 html 内容中的 div 是一行高。我之前将 div 高度设置为 100%,但发现滚动开始出现问题。如果我点击 div,键盘就会出现。但是,如果用户点击此自定义 UITableViewCell 中的任何其他位置,则不会选择 UIWebView div,并且不会出现键盘。

如何让我的自定义 UITableViewCell 或自定义 UIView 子类成为第一响应者?还是我的做法有误?

最佳答案

我相信您的做法是错误的。为 tableView:willSelectRowAtIndexPath: 返回 nil 不会真正帮助您解决这个问题。

相反,您有几个选择。首先,您可以创建一个 UIButton,它位于填充整个 View 的表格单元格中的文本字段后面,然后响应对其的触摸并告知文本字段变为事件状态。像这样:

在 UITableViewCell 子类中连接按钮:

[self.button addTarget:self action:@selector(handleTouch) forControlEvents:UIControlEventTouchUpInside];

触摸时将焦点设置在文本字段上:

- (void)handleTouch
{
[self.textField becomeFirstResponder];
}

另一个选项,也是我不太喜欢的选项,是在委托(delegate)方法中处理单元格的选择,并通知单元格的文本字段变为事件状态。像这样:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MyCustomCellSubclass *cell = [tableView cellForRowAtIndexPath:indexPath];
[cell.textField becomeFirstResponder];
}

当然,您需要在 MyCustomCellSubclass 中添加一个 textField 属性才能执行此操作。

希望这对您有所帮助!

关于objective-c - 使自定义 UIView 成为自定义 UITableViewCell 中的第一响应者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11090553/

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