1

テキストフィールドがアクティブになった直後にUIMenuControllerを表示したいだけです。
私が今していることは:

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

メソッドが呼び出されますが、メニューが表示されません...
テキストフィールドでタッチ+ホールドジェスチャを実行すると、定期的に表示されます。

そのための簡単な解決策があることを願っています、ありがとう

4

2 に答える 2

8

私はあなたの質問に対する良い解決策を見つけました。

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

これは、シミュレーターで非常にうまく機能します。これがお役に立てば幸いです。

于 2012-07-09T13:19:38.747 に答える
2

より簡単な解決策:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [textField select:nil];
        UIMenuController *menuController = [UIMenuController sharedMenuController];
        [menuController setMenuVisible:YES animated:YES];
    }];
}
于 2013-02-16T21:03:54.617 に答える