在 UITextView 中点击光标会调出 UIMenuController。点击选择会导致相关文本被选中,并显示另一个带有新选项的 UIMenuController。点击 TextView 中的任何其他位置会导致“第二个”UIMenuController 隐藏。
我有一个自定义 UIMenuItem,当点击时,它会选择 UITextView 中的当前文本行,然后再次显示 UIMenuController 以进行后续操作,但是“第二个”UIMenuController 在点击时不会隐藏 View 中预期的任何其他位置。
自定义菜单项操作:
- (void)selectLine:(id)sender {
NSString *string = [[self textView] text];
NSRange range = [[self textView] selectedRange];
NSRange newRange = [string lineRangeForRange:range];
if ([[string substringWithRange:newRange] hasSuffix:@"\n"]) {
newRange.length -= 1;
}
[[self textView] setSelectedRange:newRange];
CGRect targetRect = [[self textView] firstRectForRange:[[self textView] selectedTextRange]];
UIMenuController *menuController = [UIMenuController sharedMenuController];
[menuController setTargetRect:targetRect inView:[self textView]];
[menuController setMenuVisible:YES animated:YES];
}
最佳答案
您可以在更改 UITextView 的选择时隐藏 UIMenuController:
@interface ViewController () <UITextViewDelegate>
@property (weak, nonatomic) IBOutlet UITextView *textView;
@end
@implementation ViewController
@synthesize textView;
- (void)viewDidLoad {
[super viewDidLoad];
textView.delegate = self;
}
- (void)selectLine:(id)sender {
...
}
#pragma mark - UITextViewDelegate
- (void)textViewDidChangeSelection:(UITextView *)textView {
if (UIMenuController.sharedMenuController.isMenuVisible) {
[UIMenuController.sharedMenuController setMenuVisible:NO animated:YES];
}
}
关于ios - 第二个 UIMenuController 没有隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56915341/