删除所有UITextView的手势识别器

时间:2013-09-07 05:19:20

标签: iphone ios objective-c ipad

我正在开发一个在桌面视图中的自定义UITableViewCell中具有UITextView的应用程序。 tableviewcell有几个手势识别器。我的问题是textview在tableViewCell的识别器之前响应触摸。我有一个很长的时间用于将单元格移动到另一个位置,但是textview会尝试选择它的文本来复制/粘贴/放大镜功能。此外,textview正在吞噬tableview本身的触摸,因此如果你开始滚动文本视图滚动,滚动将无法在tableview中运行。

即使将editable属性设置为false,textview仍然希望选择文本并显示放大镜。

最初,我使用UITextField代替UITextView,但我需要支持多行文本。

那么如何防止textview吞噬任何触摸事件?任何建议或想法将不胜感激。

1 个答案:

答案 0 :(得分:1)

以下是我们如何处理UITextView中包含的UITableViewCell用户互动:

1)您的UIViewController应符合UITableViewDataSourceUITableViewDelegateUITextViewDelegate

#import <UIKit/UIKit.h>

@interace MyExampleController : UIViewController <UITableViewDataSource, UITableViewDelegate, UITextViewDelegate>

2)最初,文本视图的userInteractionEnabled属性设置为NO

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     static NSString *textViewCellIdentifier = @"MyTextViewCellIdentifier";
     MyTextViewViewCell *cell = [tableView dequeueReusableCellWithIdentifier:textViewCellIdentifier];

     if (!cell)
     {
         // ... do your stuff to create the cell...
         cell.textView.userInteractionEnabled = NO;
         cell.textView.delegate = self;
     }

     // do whatever else to set the cell text, etc you need...

     return cell;
}

3)检查是否通过UITableViewDelegate方法点击了文本视图单元格:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    BOOL isTextViewCell = ... // do your check here to determine if this cell has a text view

    if (isTextViewCell)
    {
        [[(MyTextTableViewCell *)cell textView] setUserInteractionEnabled:YES];
        [[(MyTextTableViewCell *)cell textView] becomeFirstResponder];
    }
    else
    {
        // ... do whatever else you do...
    }
}

4)检查\n以确定何时让textView辞职第一响应者(当用户按下return键时通过):

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
    {
        if ([text rangeOfString:@"\n"].location != NSNotFound)
        {
            [textView resignFirstResponder];
            textView.
            return NO;
        }

        return YES;
    }

5)在文本视图重新签名(结束编辑)后,将文本保存到模型中一次:

- (void)textViewDidEndEditing:(UITextView *)textView
{
    NSString *text = textView.text;
    // do your saving here    
}

这主要是当场写的,所以可能会有一些小错误,但希望你能得到一般的想法。

祝你好运。