当我长时间点击标准邮件应用中的任何文字时,我会看到一个"全选"选项。
但是,当我长时间点击我自己的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;
答案 0 :(得分:7)
这是因为:
self.messageLabel.editable = NO;
所以要确定你有三个选择。
删除该行(或将其设置为YES
),它将显示这些选项。
在您定义canPerformAction:
UITextView
方法
- (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:
方法也可以。
答案 1 :(得分:0)
子类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)
}
}