【问题标题】:Second UIMenuController not Hiding第二个 UIMenuController 不隐藏
【发布时间】:2019-11-16 19:30:47
【问题描述】:

在 UITextView 中点击光标会调出 UIMenuController。点击 Select 会导致选择相关文本并显示另一个带有新选项的 UIMenuController。点击文本视图中的其他任何地方都会导致“第二个”UIMenuController 隐藏。

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

自定义菜单项操作:

- (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];
}

【问题讨论】:

  • 尝试在最后三行之前添加延迟。给当前菜单一个拆掉的机会。
  • 尝试了 2 秒延迟。没有什么不同。
  • 如何在选择文本后自定义第二个菜单?我希望只有在选择文本后才能拥有自己的文本格式选项。
  • @CliftonLabrum UIMenuController 是一个共享/单例对象,所以从技术上讲只能有一个。可以通过canPerformAction:withSender: 方法切换菜单项。我检查了UITextViewselectedRange 属性以确定是否应该显示我的自定义菜单项。

标签: ios objective-c uikit uimenucontroller


【解决方案1】:

您可以在更改 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];
    }
}

【讨论】:

  • 呃。这样就可以了。谢谢!!
猜你喜欢
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多