1

私の iPad アプリでは、ボタンを押すとビューがフォームシートとしてモーダルに表示されます。テキストフィールドにテキストを入力した後にキーボードを閉じるために、提案どおりに試しました。

「disablesAutomaticKeyboardDismissal」メソッド。

これは機能しません。実際、ログによると、メソッドは呼び出されません。iPhoneの場合、またはモーダルで表示しないことを選択した場合、キーボードは閉じます。

これが私のコードです:

- (BOOL)disablesAutomaticKeyboardDismissal
{  
    NSLog(@"method calls");
    return NO;
}

- (IBAction)showNewView:(id)sender
{

    MyViewController *mvc = 
            [[MyViewController alloc] init];

// some lines about setting content
//...

    UINavigationController *navController = [[UINavigationController alloc] 
                                initWithRootViewController:mvc];

    [navController setModalPresentationStyle:UIModalPresentationFormSheet];
    [self presentViewController:navController animated:YES completion:nil];
}

-(BOOL)disablesAutomaticKeyboardDismissal かどうかに関係なく、次の行を削除しない限り、キーボードは閉じられません。

    // [navController setModalPresentationStyle:UIModalPresentationFormSheet];

しかし、その後、私が望むように提示されなくなりました。

誰かが私が間違っていることを見ることができますか?

4

1 に答える 1

7

-(BOOL)disablesAutomaticKeyboardDismissal は、プレゼンターではなく、フォーム シートとして表示されるビュー コントローラーによってオーバーライドされ、NO を返す必要があります。それはあなたの間違いです。あなたの場合、 UINavigationController をサブクラス化して、目的の動作を取得できます。

@interface AutomaticKeyboardDismissingNavigationController : UINavigationController
@end

@implementation AutomaticKeyboardDismissingNavigationController
- (BOOL)disablesAutomaticKeyboardDismissal
{
    return NO;
}
@end

(クラス名は、おそらくもう少し短くてもわかりやすいでしょう。)

于 2012-10-08T11:29:31.183 に答える