私はあなたの質問に対する良い解決策を見つけました。
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];
}
これは、シミュレーターで非常にうまく機能します。これがお役に立てば幸いです。