【问题标题】:Add the "Select All" option after long tapping a UITextView长按 UITextView 后添加“全选”选项
【发布时间】:2015-01-06 22:49:44
【问题描述】:

当我长按标准邮件应用程序中的任何文本时,我会看到一个“全选”选项。

但是,当我在自己的UITextView 中长按文本时,我没有得到该选项。如何添加?

这里是设置我的 UITextView 的相关代码:

self.messageLabel = [[UITextView alloc] init];
self.messageLabel.dataDetectorTypes = UIDataDetectorTypeAll;
self.messageLabel.editable = NO;
self.messageLabel.scrollEnabled = NO;
self.messageLabel.selectable = YES;
self.messageLabel.textContainerInset = UIEdgeInsetsZero;
self.messageLabel.textContainer.lineFragmentPadding = 0.0;

【问题讨论】:

    标签: ios cocoa-touch uitextview


    【解决方案1】:

    因为:

    self.messageLabel.editable = NO;
    

    所以要解决这个问题,您有三个选择。

    选项 1

    删除该行(或将其设置为YES),它将显示这些选项。


    选项 2

    自定义UIMenuController


    选项 3

    在您定义 UITextView 的 viewController 类中实现 canPerformAction: 方法

    - (BOOL)canPerformAction:(SEL)action withSender:(id)sender
    {
        if (action == @selector(selectAll:))
        {
            return YES;
        }
        
        return [super canPerformAction:action withSender:sender];
    }
    

    并实现selectAll: 方法,如:

    - (void)selectAll:(id)sender
    {
        [self.messageLabel selectAll:sender];
    }
    

    注意:如果您没有实现canPerformAction:,那么只需定义selectAll: 方法也可以。

    【讨论】:

    • 看来只有在视图控制器中定义-(void)selectAll:(id)sender才会添加“全选”功能。但是,现在弹出的菜单已损坏。点击“复制”、“全选”和“定义”都不会做任何事情——菜单不会自行关闭。此外,我在selectAll 函数内设置了一个断点,它永远不会在那里中断。
    • @Pwner:它在我的示例应用程序中运行。我使用了相同的代码,我怀疑代码有问题。你能解释一下,你现在改变了什么?
    • 我刚刚定义了 selectAll: 但它没有被调用。知道为什么吗?
    【解决方案2】:

    子类 UITextView 并覆盖 canPerformAction:withSender: 就可以了。

    class TextView : UITextView {
    
        override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
            if action == #selector(selectAll) {
                if let range = selectedTextRange, range.start == beginningOfDocument, range.end == endOfDocument {
                    return false // already selected all text
                }
                return !text.isEmpty
            }
            return super.canPerformAction(action, withSender: sender)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 2014-09-02
      • 2022-08-15
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多