我希望 UITableViewCell 中的 UItextField 仅在单元格触摸时成为第一响应者
这就是我想要实现的目标:
我希望 UITableViewCell
中的 UITextField
仅在单元格触摸时成为第一响应者。仅当我在方法中将文本字段设置为第一响应者时,我才希望文本字段成为第一响应者:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`
知道如何实现此目的吗?当直接触摸文本字段时,永远不会调用tableView:didSelectRowAtIndexPath:
。
提前致谢。
This is what I'm trying to achieve:
I want a UITextField
that is in UITableViewCell
to become first responder only when the cell touched. I would like the text field to become the first responder only when I set it to first responder in the method:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`
Any idea how I can achieve this? When the textfield is touched directly, tableView:didSelectRowAtIndexPath:
is never called.
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我想,你有一个自定义的 UITableViewCell。这样你就可以有一个 UITextField 成员。正确的?
在自定义单元格类中,重写方法
- (void)setSelected:(BOOL)selectedAnimated:(BOOL)animated
:其中,如果 selected == YES,则将文本字段设置为第一个应答者。否则,请辞去第一响应者的职务。
I guess, u have a custom UITableViewCell. In that u could have a UITextField member. Right?
In the custom cell class, override the method,
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
:In that , if selected == YES, then make the text field as first responder. Else , resign the first responder.
让一个对象作为 UITextField 的委托并实现
textFieldShouldBeginEditing:
;如果尚未选择单元格,则返回NO
。 (如果直接调用becomeFirstResponder
绕过检查,您可能始终能够从此方法返回 NO。)Let an object be the delegate of the UITextField and implement
textFieldShouldBeginEditing:
; returnNO
if the cell hasn't been selected. (You might be able to always return NO from this method, if callingbecomeFirstResponder
directly bypasses the check.)为了让 textField 在选择
uitableviewcell
时成为第一响应者
,请使用您的 textField 作为您的属性
,并调用[self. textField1成为FirstResponder];
注意:您将需要与UITableViewCells数量一样多的属性,因为每个单元格都有一个textField。
当触摸文本字段时,编译器不会知道相应的行已被选择。
为此,您需要使用
tags
,例如textField.tag == 0
表示第一个文本字段,textField.tag ==1
表示第二个 TextField 等等。在textFieldDidBeginEditing
中,您应该检查标记,然后将该值与所选的相应行链接起来。这些有道理吗? :)
For having the textField become the
first responder
when auitableviewcell
is selected, use your textField as yourproperty
, and call[self.textField1 becomeFirstResponder];
Note: You will need as many properties as your the number of UITableViewCells as each cell has a textField.
When a textField is touched, the compiler will not know that the corresponding row got selected.
For this you will need to use
tags
, such astextField.tag == 0
for the first textField,textField.tag ==1
for the second TextField and so on. And in thetextFieldDidBeginEditing
you should check for the tag, and then link that value with the corresponding row selected.Did any of these make sense ? :)
首先,您需要一个自定义表格单元格,您自己的
UITableViewCell
子类。在该实现中,您需要实现hitTest:
来确定触摸发生的位置。在该方法中,您可以确定触摸实际上是否在 UITextField 的矩形内,如果是,则使其成为第一响应者。下面是我为项目编写的一些代码的示例:在本例中,属性
nickname
是自定义 UITableViewCell 内的 UITextField。self.editing 周围的条件可能与您的应用程序相关,也可能不相关。这里的想法是向您展示 hitTest: 通常如何使用。
First, you need a custom table cell, your own subclass of
UITableViewCell
. In that implementation, you need to implementhitTest:
to determine where the touch occurred. In that method you can determine if the touch was in fact inside the rect of your UITextField, and if it was, make it the first responder. Here's an example from some code I wrote for a project:The attribute
nickname
, in this case, was a UITextField inside the custom UITableViewCell.The condition around self.editing may or may not be relevant to your application. The idea here is show you how hitTest: might be used, in general.