将TapGestureRecogniser添加到UITextView

时间:2016-01-27 13:32:48

标签: ios objective-c uitableview uitextview

我查看了类似的问题并尝试了答案,我无法让它们正常工作,如果这是一个重复的问题,请道歉。

我的表视图中有两个地址字段,可以在静态单元格中动态添加。当用户在第一个框中输入地址时,我想要“复制地址”的问题。当他们点击第二个地址字段时显示,然后如果他们回答“是”'则复制地址。我有这个工作在tableView didSelectRowAtIndexPath,但是当用户直接在字段中点击UITextView时它不起作用。我尝试将以下内容添加到viewDidLoad()函数中:

UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[self.billingAddress addGestureRecognizer:tap];

但是,点击UITextView billingAddress时,以下代码不会触发。

- (void)handleTap:(UITapGestureRecognizer *)recognizer
{
    NSLog(@"I am here");
}

我应该注意,billingAddress被定义为UITextField属性,并在静态单元格的tableView cellForRowAtIndexPath中分配了单元格的详细信息。这是使用以下代码完成的:

if (section == 0 && row == 3) {
    BFCell* cell = [self.tableView dequeueReusableCellWithIdentifier:@"CheckoutInputCell"];
    cell.nameLabel.text = @"Billing Address";
    cell.nameLabel.font = [UIFont fontWithName:@"Populaire" size:23.0f];
    cell.textField.placeholder = @"Required";
    self.billingAddress = cell.textField;
    cell.textField.keyboardType = UIKeyboardTypeAlphabet;
    return cell;
}

我想知道我是否将点击手势分配到错误的位置,并且应该将其分配给cell.textField。对此的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我认为发生的事情是文本字段和手势识别器之间的冲突。我会使用UITextFieldDelegate textFieldShouldBeginEditing:来检测用户点击文字字段的时间。

答案 1 :(得分:0)

持有属于UITableViewCell的对象的引用是一个很大的错误。

最好通过在单元格中使用布尔flad将UITapGestureRecognizer直接添加到单元格内的文本字段中,以告诉它是否应该响应触摸。

if (section == 0 && row == 3) {
    BFCell* cell = [self.tableView dequeueReusableCellWithIdentifier:@"CheckoutInputCell"];
    cell.nameLabel.text = @"Billing Address";
    cell.nameLabel.font = [UIFont fontWithName:@"Populaire" size:23.0f];
    cell.textField.placeholder = @"Required";
    //self.billingAddress = cell.textField; // wrong way.
    cell.addTouchFlag = true  // do this instead.
    cell.textField.keyboardType = UIKeyboardTypeAlphabet;
    return cell;
}

和两者

UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[self.textField addGestureRecognizer:tap];

- (void)handleTap:(UITapGestureRecognizer *)recognizer
{
    NSLog(@"I am here");
}

应该在单元格类中(如果没有,则可以创建它)。

Charles Thierry answer中的

更新:他很清楚使用委托方法更好的方法是检测用户点击textField。但你应该像我上面提到的那样做。这意味着单元格类符合UITextFieldDelegate并实现textFieldShouldBeginEditing: