Ios 加上「;选择全部";长时间点击UITextView后的选项

Ios 加上「;选择全部";长时间点击UITextView后的选项,ios,cocoa-touch,uitextview,Ios,Cocoa Touch,Uitextview,当我长按标准邮件应用程序中的任何文本时,我会看到一个“全选”选项 然而,当我长时间点击自己的文本时,我没有这个选项。我如何添加它 以下是设置我的UITextView的相关代码: self.messageLabel = [[UITextView alloc] init]; self.messageLabel.dataDetectorTypes = UIDataDetectorTypeAll; self.messageLabel.editable = NO; self.messageLabel.

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

然而,当我长时间点击自己的文本时,我没有这个选项。我如何添加它

以下是设置我的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;
这是因为:

self.messageLabel.editable = NO;
因此,对于修复,您有三个选项

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


选择2 定制


选择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];
}

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

子类
UITextView
和覆盖
canperformation: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)
    }
}

似乎只有在视图控制器中定义
-(void)selectAll:(id)sender
,才会添加“全选”功能。然而,现在弹出的菜单坏了。点击“复制”、“全选”或“定义”都不起作用-菜单不会自动关闭。另外,我在
selectAll
函数中设置了一个断点,它在那里从不中断。@Pwner:它在我的示例应用程序中工作。我使用了相同的代码,我怀疑代码有问题。你能解释一下,你现在改变了什么吗?我刚刚定义了selectAll:但它没有被调用。知道为什么吗?