2009-07-11 15 views
1

iPhone用のhello worldアプリケーションを実装しようとしています。しかし、私はキーボードを消す方法を理解することはできません。私はthisを見てきましたが、それは助けになりません(私は私のコードでresignFirstResponderを持っています)。関連するテキストフィールドをデリゲートとしてファイルの所有者に接続しました。ここではキーボードが消えるべきかどうかを決定するコードです:iPhoneで「完了」を押したときにキーボードが消えない

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    if (theTextField == textField) 
    { 
     [textField resignFirstResponder]; 
    } 
    return YES; 
} 

私は、これは途方もなく明らかであると確信しているが、私は答えを見つける傾けます。あなたの助けを前もってありがとう!

答えて

4

まず、テキストフィールドのデリゲートをテキストフィールドのファイルの所有者の代理人ではなく、ファイルの所有者に接続する必要があります。これは紛らわしいかもしれませんが、Interface Builderでテキストフィールドを選択し、そのファイルの所有者の "代理人"接続ポイントを確認することで簡単に確認できます。

次に、コード内のifステートメントを削除するとどうなりますか?テキストフィールドのデリゲートをファイルの所有者にリンクし、コードを次のように変更します。

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    [theTextField resignFirstResponder]; 
    return YES; 
}

希望の結果が得られるはずです。

それでも問題が解決しない場合は、ファイルの所有者のクラスが、そのメソッドが実装されているクラスと同じであることを確認します。たとえば、コードがRootViewController.mにある場合は、ファイルの所有者はInterface BuilderのRootViewControllerのインスタンスです。

+0

私はデリゲートについてはっきりしていなかったと思います。なんらかの理由で、ifステートメントを削除するとうまくいきました。ありがとう! – RCIX

0

あなたのコード

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    if (theTextField == textField) 
    { 
     [textField resignFirstResponder]; 
    } 
    return YES; 
} 

は一種の失敗です。

あなたはdelegateメソッドのパラメータにresignFirstResponderを呼び出さなかったので、インスタンス変数と呼んでいました。これは、次のように書かれているはずです。

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    if (theTextField == [self textField]) { 
     [theTextField resignFirstResponder]; 
    } 
    return YES; 
} 
+0

もちろん、私が提供したコードを使用するには、textFieldがプロパティでなければなりません。実際には、インスタンス変数と実際に通信するべきではありません。それが何のためのプロパティです。プロパティーは、インスタンス変数を使って物事を行うための素晴らしい、満足のいく、メモリ管理のカプセル化を提供します。 –

関連する問題