显示UIMenuController在的UITextField的editingDidBegin(Di

2019-07-30 05:15发布

我只是想显示UIMenuController之后一个文本框已经成为活跃。
我在做什么现在的问题是:

- (IBAction)textFieldeditingDidBegin:(UITextField *)sender {
    // textfield menu item
    UIMenuController *menu = [UIMenuController sharedMenuController];
    [menu setTargetRect:sender.frame inView:self.view];
    [menu setMenuVisible:YES animated:YES];
}

该方法被调用,但它只是不会显示菜单...
如果我做了触摸+按住文本框的手势也经常出现。

我希望有一个为一个简单的解决方案,谢谢

Answer 1:

我发现了一个很好的解决你的问题。

您可以轻松地使UIMenuController当你开始用这种方法编辑的文本字段会出现:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    double delayInSeconds = 0.1;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        UIMenuController *menu = [UIMenuController sharedMenuController];
        [menu setTargetRect:textField.frame inView:textField.superview];
        [menu setMenuItems:[NSArray arrayWithObjects:
                            [[UIMenuItem alloc] initWithTitle:@"Test" action:@selector(test)],
                            nil]];
        [menu setMenuVisible:YES animated:YES];
    });
}

我用的是dispatch_after通话,以确保该菜单显示所有默认设置系统上的呼叫 UITextField完成。

我也改变了inView:self.view的一部分setTargetRect::inView:textField.superview以确保该菜单正确显示在文本字段的容器视图。

如果你也想禁用默认菜单控件的UITextField ,你可以将这个方法添加到您的控制器:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(cut:))
        return NO;
    else if (action == @selector(copy:))
        return NO;
    else if (action == @selector(paste:))
        return NO;
    else if (action == @selector(select:) || action == @selector(selectAll:))
        return NO;
    else
        return [super canPerformAction:action withSender:sender];
}

这项工作真的很好在模拟器。 我希望这能帮到您!



Answer 2:

一个简单的办法:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [textField select:nil];
        UIMenuController *menuController = [UIMenuController sharedMenuController];
        [menuController setMenuVisible:YES animated:YES];
    }];
}


文章来源: Display UIMenuController in editingDidBegin of a UITextField