我为您的问题找到了一个很好的解决方案。
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
如果您还想禁用 a 的默认菜单控件,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];
}
这在模拟器中工作得非常好。我希望这能帮到您!