ios - 第二个 UIMenuController 没有隐藏

标签 ios objective-c uikit uimenucontroller

在 UITextView 中点击光标会调出 UIMenuController。点击选择会导致相关文本被选中,并显示另一个带有新选项的 UIMenuController。点击 TextView 中的任何其他位置会导致“第二个”UIMenuController 隐藏。

Example of system behavior

我有一个自定义 UIMenuItem,当点击时,它会选择 UITextView 中的当前文本行,然后再次显示 UIMenuController 以进行后续操作,但是“第二个”UIMenuController 在点击时不会隐藏 View 中预期的任何其他位置。

Example of undesired behavior

自定义菜单项操作:

- (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/

相关文章:

iphone - iOS使用数组添加到UITableView

ios - 在分组表中设置标题 View 时出现问题

ios - 保留发送到释放的 UIViewController

ios - 如何在 iOS 屏幕关闭时继续监视 iBeacon?

python - 高效刷新 TableView

objective-c - 将 "SELF IN"与 NSPredicate 和 RLMResults 一起使用

ios - 为什么 UIBarButtonItem 显示为已禁用?

"received memory warning"消息后 iOS UITableView 内容松散

iphone - 使用 NSFileManager createDirectoryAtPath 返回值不正确 :

ios - viewWithTag 在初始化 UICollectionViewCell 时返回 nil