UITapGestureRecognizer在UITextView中触发一次

时间:2013-07-10 07:26:06

标签: ios objective-c uitextview

当用户点击UITextView时,我需要在UITextView中将游标设置在第一个位置。 NSMakeRange对我没有帮助,但我在How to set cursor position for UITextView on user input?

中找到了解决方法

我在我的UITextView中添加了tapGesture。但它第一次只能工作一次,为什么?

textViewMessage.gestureRecognizers = nil;
UITapGestureRecognizer *tapTextView = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTextView)];
[textViewMessage addGestureRecognizer:tapTextView];

此方法只调用一次

- (void)tapTextView
{
    [textViewMessage becomeFirstResponder];
}

2 个答案:

答案 0 :(得分:1)

试试这个:子类UITextView并添加以下方法:

- (BOOL)becomeFirstResponder
{
    BOOL result = [super becomeFirstResponder];

    if (result)
    {
        //Take your cursor to any position you want
    }
    return result;
}

- (BOOL)resignFirstResponder
{
    BOOL result = [super resignFirstResponder];

    if (result)
    {
        //Do anything you need when text view resigns
    }
    return result;
}

答案 1 :(得分:1)

当textView成为第一响应者时,您无法捕获它上面的触摸事件。我很快就找到了一种骇人的方式,但我确信你能找到更好的方式。

- (void)tapTextView
{
    [textViewMessage setEditable:YES];
    [textViewMessage becomeFirstResponder];
}

- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
    if ([textView isFirstResponder]) {
        [textView setEditable:NO];
    }
    return YES;
}

您需要将UITextViewDelegate添加到头文件中。希望它有所帮助。