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

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

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

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

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

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

【问题讨论】:

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

标签: ios objective-c uitableview uitextview uimenucontroller


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多