Ios 我希望UITableViewCell中的UItextField仅在单元格接触时成为第一响应者

Ios 我希望UITableViewCell中的UItextField仅在单元格接触时成为第一响应者,ios,ios4,first-responder,Ios,Ios4,First Responder,这就是我想要实现的目标: 我希望UITableViewCell中的UITextField仅在触摸单元格时成为第一响应者。仅当我在方法中将文本字段设置为first responder时,我才希望它成为first responder: - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath` 你知道我怎样才能做到这一点吗?直接触摸文本字段时,tableView:didSe

这就是我想要实现的目标:

我希望
UITableViewCell
中的
UITextField
仅在触摸单元格时成为第一响应者。仅当我在方法中将文本字段设置为first responder时,我才希望它成为first responder:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`
你知道我怎样才能做到这一点吗?直接触摸文本字段时,
tableView:didSelectRowAtIndexPath:
永远不会被调用


提前感谢。

让一个对象成为UITextField的委托,并实现
textfield应该开始编辑:
;如果未选择单元格,则返回
NO
。(如果调用
becomeFirstResponder
直接绕过检查,您可能总是能够从此方法返回NO。)

要使文本字段成为
FirstResponder
,请在选择
uitableviewcell
时,将文本字段用作
属性,然后调用
[self.textField1成为第一响应者];

注意:由于每个单元格都有一个文本字段,因此需要的属性数量与UITableViewCells的数量相同

当触摸文本字段时,编译器将不知道相应的行已被选中。 为此,您需要使用
标记
,例如
textField.tag==0
用于第一个textField,
textField.tag==1
用于第二个textField,依此类推。在
textfieldDiBeginediting
中,您应该检查标记,然后将该值与所选的相应行链接


这些有意义吗?:)

首先,您需要一个自定义表格单元格,即您自己的
UITableViewCell
子类。在该实现中,您需要实现
hitTest:
以确定触摸发生的位置。在该方法中,您可以确定触摸是否确实在UITextField的rect内,如果在,则可以确定触摸是否在UITextField的rect内让它成为第一响应者。下面是我为一个项目编写的一些代码中的一个示例:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { if (self.editing) { if ([nickname pointInside:[self convertPoint:point toView:nickname] withEvent:nil]) return [nickname hitTest:[self convertPoint:point toView:nickname] withEvent:event]; return [super hitTest:point withEvent:event]; } return [self contentView]; } -(UIView*)hitTest:(CGPoint)point with event:(UIEvent*)event { 如果(自编辑){ if([nickname pointInside:[self-convertPoint:point-toView:nickname]withEvent:nil]) return[昵称hitTest:[self-convertPoint:point-to-view:昵称]with-event:event]; 返回[super hitTest:pointwithevent:event]; } 返回[自内容视图]; } 在本例中,属性
昵称
,是自定义UITableViewCell内的UITextField


自我编辑的条件可能与您的应用程序相关,也可能与您的应用程序无关。这里的想法是向您展示hitTest:的一般用法。

我想,您有一个自定义的UITableViewCell。这样您就可以有一个UITextField成员。对吗

在自定义单元类中,重写该方法

-(void)setSelected:(BOOL)selected animated:(BOOL)animated

在这种情况下,如果选择==YES,则将文本字段设置为first responder。否则,退出first responder