1

UITableView で行が選択され、ナビゲーション コントローラー内でプッシュ セグエがトリガーされたときに、現在編集されているテキスト フィールドからファーストレスポンダーを辞任したいと考えています。これはポップオーバー内で発生しています。

私は2つのことを試しました:

(1)アニメーション中にテキストフィールドがファーストレスポンダーを辞任していることがわかりますが、ビューコントローラーに戻ると、ファーストレスポンダーが再び取得され、キーボードが表示されます。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.view endEditing:YES];
}

(2)これにより、View Controller に戻ったときに編集が復元されなくなりますが、この方法ではアニメーションが壊れます。アニメーションの最後で、最初のビュー コントローラーが黒くなり、少しジャンプします。

編集:これは、キーボードがプッシュ アニメーションよりも速くアニメーション化することに関係しているため、ランドスケープ モードでのみ表示されることに気付きました。キーボードに余裕ができたとき。アニメーションは、ナビゲーション コントローラーでプッシュ アニメーションをアニメーション化している間、ポップオーバーの展開を処理できません。以下のコードを削除し、プッシュして iOS にキーボードを削除させると、キーボードとプッシュのアニメーションがまったく同時に実行され、この問題が回避されます。辞任を強要しながら、どうすれば自分でそれを実現できるのだろうか。

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.view endEditing:YES];

    return indexPath;
}

ビューコントローラーを変更するときに、元に戻るときにテキストフィールドのファーストレスポンダーを再度復元せずにファーストレスポンダーを辞任するにはどうすればよいですか?

4

1 に答える 1

0

ちょっと待って。したがって、問題は、ビューが復元されたときにセグエを実行する (およびビューを閉じる) と、キーボードの一種の影が表示されることです。あれですか?その場合。以下を試すことができます。テーブルビューセルをクリックすると。チェックを行います。以下のように。

if(firstResponder != nil){
    //register for keyboard hide notification
    [[NSSnotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:@"UIKeyboardDidHideNotification" object:nil];. 
    [firstResponder resignFirstResponder]; 
} else {
     [self performSegue:@"yoursegueidentifier" withSender:nil];
}  

これは、レスポンダがない場合 (つまり、キーボードがない場合) にのみセグエを起動します。キーボードがある場合は、キーボード非表示通知に登録し、レスポンダーを辞任します。次に、キーボードの非表示に対応するメソッドで

- (void)keyboardDidHide:(NSNotification *)notification {
     [self performSegue:@"yoursegueidentifier" withSender:nil];
 }   

これは、キーボードが非表示になっている場合にのみセグエを実行する必要があるため、アニメーションの問題を解決する必要があります。ストーリーボードを変更して、セルのボタンからではなく、ビュー コントローラーからセグエを起動する必要がある場合があります。アーキテクチャがどのようになっているのかわかりません。これがうまくいくかどうか教えてください。

于 2013-01-17T04:09:20.707 に答える