1

KEYBOARD情報を取得してビューを調整し、選択したテキスト フィールドがKEYBOARDで覆われないようにNOTIFICATIONを設定しています。

@property CGSize keyboard;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillShow:)
                                                 name:@"UIKeyboardWillShowNotification"
                                               object:nil];
    ...
}

- (void) keyboardWillShow:(NSNotification *)note
{
    NSDictionary *userInfo = [note userInfo];
    self.keyboard = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
}

UITextFieldDelegateを設定したので、 KEYBOARD情報を使用できます

- (void)textFieldDidBeginEditing:(UITextField *)textField

すべてが完璧に機能します...

初めての場合を除いて。

KEYBOARDプロパティを設定するNOTIFICATIONはtextFieldDidBeginEditingの後に呼び出されるため、初めてKEYBOARDプロパティが設定されていないため、正しく表示されません。

KEYBOARDプロパティは既に設定されており、値は変更されていないため、その後は問題ありません。

textFieldDidBeginEditingを最初に実行する前にKEYBOARD情報を取得するにはどうすればよいですか?

編集

何か解決策を見つけましたが、うまくいくようですが、私には少しハックな感じがして、キーボード情報を取得する方法があるかどうかまだ疑問に思っています.

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.txtField becomeFirstResponder];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self.txtField resignFirstResponder];
}

キーボードを表示したり隠したりするときに画面の一番下に短いフラッシュが表示されますが、これは好きではありませんが、それを探すことを知らない人にとっては、おそらくあまり明白ではなく、目立ちません.

becomeFirstResponderrejectFirstResponderを別のメソッドに分割する必要があります。同じメソッドから呼び出された場合、keyboardWillShowは呼び出されないためです。

また、その状況でもkeyboardWillShowが呼び出されないため、viewDidLoadにbecomeFirstResponderを配置できません。

誰かが改善またはより良い方法を持っているなら、私はそれを聞きたい.

4

1 に答える 1

1

これを行う 1 つの方法は、編集の開始時にテキスト フィールドのフレームを設定する代わりに、テキスト フィールドを反復処理してisFirstResponderプロパティをチェックし、ファーストレスポンダのフレームを移動することです。キーボードフレームを取得するメソッドですべてを行うことができます。

于 2013-08-09T21:29:10.133 に答える