UIMenucontroller 与 uitableviewcell 上的 uitextview

Posted

技术标签:

【中文标题】UIMenucontroller 与 uitableviewcell 上的 uitextview【英文标题】:UIMenucontroller with uitextview on uitableviewcell 【发布时间】:2014-07-18 06:56:25 【问题描述】:

我的自定义 UITableViewCell 中有一个 UITextView。我基本上使用 UITextView 来提供对单元格的数据检测。我为不同的单元格设置了自己的自定义 UIMenuitems。

              |-------------------------------|
              |                               |
              |   |------------------|        |
              |   |                  |        |
              |   |        UITextView|        |
              |   |__________________|        |
              |                               |
              |                UITableViewCell|
              |_______________________________|

我面临的问题是,当我点击 UITextView 中的区域时,我没有得到任何菜单控制器,预期的行为是,它应该调用为该特定 UITebleViewCell 定义的相同菜单控制器。

如果我用 UILabel 替换 UITextView,我得到了正确的菜单控制器,但我失去了数据检测能力。

请指导我正确的方向,我错过了什么或我做错了什么?

【问题讨论】:

你说的数据检测是什么意思? 我想检测电话号码、链接、地址、事件,所以我使用 [_textView setDataDetectorTypes:UIDataDetectorTypeAll]; 【参考方案1】:

您可以使用 UITapGestureRecognizer 来检测文本视图上的点击。

确保 userInteractionEnabled 对于您的 textView 为 TRUE

myTextView.userInteractionEnabled = TRUE;

为您的文本视图添加手势识别器
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myTextViewTapped:)];
[myTextView addGestureRecognizer:tapGestureRecognizer];
点击显示菜单控制器
- (void)myTextViewTapped:(id)sender 
    NSLog(@"my text view is tapped");
    // display menu now!


如果您的菜单控制器依赖于单个单元格,那么您可以使用行号作为 textView 的标记并显示相关的菜单控制器
// in your tableview cellForRowAtIndexPath method

myTextView.tag = indexPath.row;

// in your selector

UITextView *myTextView = (UITextView *)sender;
int rowNumber = myTextView.tag;

【讨论】:

以上是关于UIMenucontroller 与 uitableviewcell 上的 uitextview的主要内容,如果未能解决你的问题,请参考以下文章

在 UIMenuController 出现之前更改用于 UIMenuController 的标签标题

何时使用 UIMenuController

UIMenuController 没有出现

UIMenuController

UIMenuController

使用 uimenucontroller 时遇到问题