当文本字段位于 uitableview 的单元格中时,不调用 touchesBegan

touchesBegan not called when textfield is in uitableview's cell

所以我有一个文本字段,我在 .h 文件中有 UITextFieldDelegate。 我在 .m 文件中声明文本字段:

UITextField * titletextfield

我将文本字段放在 table 视图的单元格之一中。我将文本字段委托设置为自我,

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.row==0) {
    static NSString *CellIdentifier = @"Title";
    UITableViewCell * cell =[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    UILabel * label;
    if (cell == nil) {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        cell.selectionStyle =UITableViewCellSelectionStyleNone;
        label = [[UILabel alloc]initWithFrame:CGRectMake(5, 0, 90.0, cell.frame.size.height)];
        label.text =@"sth :";
        label.font=[UIFont systemFontOfSize:14.0];
        label.textColor =[UIColor grayColor];

        titletextfield =[[UITextField alloc]initWithFrame:CGRectMake(100, 0, cell.frame.size.width-100.0, cell.frame.size.height)];
        self.titletextfield.delegate=self;

        UIView *message = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, cell.frame.size.width, cell.frame.size.height)];
        message.tag = 0;
        message.backgroundColor =[UIColor clearColor];
        [message addSubview:label];
        [message addSubview:titletextfield];
        [cell.contentView addSubview:message];
    }
    return  cell;}

触摸开始从未被调用:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"123");
[self.view endEditing:YES];
[super touchesBegan:touches withEvent:event];
NSLog(@"22");

}

当我取消选中从 table 视图启用的用户交互时,开始调用 touchbegan 函数。但是,在这个 CAD 中,我不能再将焦点放在文本字段上了。 以前有人遇到过同样的问题吗?谢谢!

这里发生的事情意味着当你启用 UITableview "user interaction enable" 属性 那么所有的触摸都会被 UITableview 的 scrollview.At 观察到,这次 UITableview 的滚动视图的所有子视图都会得到触摸事件(在这种情况下,你的 uitextfield 也是)。所以你的 viewcontroller 视图的 touchesBegan 方法永远不会 call.if 你禁用 UITableview "user interaction enable" 属性 然后所有触摸事件都不会被观察到UITableview的scrollview并给viewcontroller的view。此时touchesBegan会被调用。