UIMenuController 未显示

UIMenuController doesn't show up

提问人:Ram2048 提问时间:6/23/2021 更新时间:6/23/2021 访问量:62

问:

我正在尝试解决一个问题两天,但我真的不知道该怎么办。我尝试了几种解决方案,但没有任何帮助。

情况是这样的:我有一个 UIViewController,并且添加了 UITextView 的子类作为子视图。

-(void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    _textView = [[DPTextView alloc] initWithFrame:self.view.bounds];
    [_textView setText:[NSString stringWithContentsOfFile:_path encoding:NSUTF8StringEncoding error:nil]];
    _textView.editable = NO;
    _textView.selectable = YES;
    _textView.delegate = self;
    _textView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    [self.view addSubview:_textView];
    //[self.view becomeFirstResponder];
    //[self becomeFirstResponder];
    //[_textView becomeFirstResponder];
}

当我打开这个 UIViewController 时,我看到文本。如果选择文本,则看不到 UIMenuController。我已经覆盖了 UITextView (DPTextView) 子类的一些方法,如下所示:

-(BOOL)canBecomeFirstResponder {
    return TRUE;
}
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    if (action == @selector(copy:))
        return YES;
    return NO;
}

但它没有出现。一段时间后,我注意到如果我按照一些步骤操作,就会出现 UIMenuController:

  1. 此控制器由另一个控制器提供。我们称它们为 Controller1(具有 UISearchController 和 UITableView)和 Controller2(具有 DPTextView)。
  2. 我点击搜索栏进入 Controller1。
  3. 我关闭了键盘点击搜索栏旁边的“取消”。
  4. 我点击显示 Controller2 的 UITableViewCell。

按照这些步骤,当我在 Controller2 中选择文本时,会出现 UIMenuController!我真的不知道为什么!我以为按下搜索栏时发生了一些事情,比如控制器成为第一响应者或类似的东西(我已经尝试调用“becomeFirstResponder”,正如您可以在上面的代码中读到的那样 - 注释的代码行)。

请注意,如果我在 Controller1 中点击并按住 UITableViewCell,我也应该获取 UIMenuController,因为我已经实现了这些方法:

-(BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath {
    return TRUE;
}
-(BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
    return (action == @selector(copy:));
}
-(void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
    if (action == @selector(copy:)) {
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        [[UIPasteboard generalPasteboard] setString:cell.textLabel.text];
    }
}

但它也没有出现在这里。如果使用搜索控制器后出现,则出现相同的情况。

有什么建议吗?我不知道这是否有帮助,但 Controller1 和 Controller2 是以模式呈现的。

iOS Objective-C Cocoa-Touch UIMumenuController

评论


答: 暂无答案