Ios 加上「;选择全部";长时间点击UITextView后的选项
当我长按标准邮件应用程序中的任何文本时,我会看到一个“全选”选项 然而,当我长时间点击自己的文本时,我没有这个选项。我如何添加它 以下是设置我的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.
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:但它没有被调用。知道为什么吗?