2009-08-27 14 views
3

私はInterface Builderで設計された私のビュー上にUITextViewを持つ小さなiPhoneプロジェクトを持っています。 ViewControllerにIBActionメソッドがあり、そのIBActionにUITextViewを接続しました。私はまた、私のコントローラで、<UITextViewDelegate>を追加しました。私の.mファイルで[iPhone SDK] [初心者] UITextView textViewDidChangeは呼び出されませんか?

私はメソッドを追加しました:

- (void)textViewDidChange:(UITextView *)textView{ 
    int count = [textView.text length]; 
    charCount.text = (NSString *)count; 
} 

しかし、アプリケーションが動作していると私はTextViewのに何かを入力すると、メソッドtextViewDidChangeに到達することはありません。何故ですか? また、ViewDidLoadメソッドでtextView.delegate = selfを追加しようとしましたが、デバッガにメッセージが表示されずにアプリケーションがクラッシュしました。

私は間違っているのですか?

はどうもありがとうございます

twicklが

答えて

1

ああ、私は間違ったことを実現しました!

はcharCountは、このように設定することmusst:

charCount.text = [[NSNumber numberWithInt:count] stringValue]; 

は、今では動作します!

+0

私はそれを見逃すことはできません。よくやった :) – Tim

9

あなたは正しい軌道に乗っている - メソッドが呼び出さ取得されていない理由は、あなたがそのテキストを変更する前に、テキストビューのデリゲートを設定していないということです。私はあなたの質問で、あなたがtestView.delegate = self;を設定しようとしたことに気付いた - textViewを意味しましたか?そのようなタイプミスは、デバッガのメッセージなしでプログラムをクラッシュさせることがよくあります。

また、textFieldDidChange:メソッドは、UITextFieldDelegateプロトコルでは定義されていません。 textField:shouldChangeCharactersInRange:replacementString:を意味するかもしれません - これは、テキストフィールドの内容が変更されるたびに実際に呼び出されるデリゲートメソッドです。独自の方法をIBActionに接続しても、あなたが望むとは思っていません。

これらのどちらも問題でない場合は、IBとクラスヘッダーファイルの両方で、さまざまな接続をすべて確認してください。

// MyViewController.h 

@interface MyViewController : UIViewController { 
    UITextField *textView; 
} 

@property(nonatomic,retain) IBOutlet UITextField *textView; 

- (IBAction)myAction:(id)sender; 

@end

そして、あなたの実装:

// MyViewController.m 

@implementation MyViewController 

@synthesize textView; 

- (IBAction)myAction:(id)sender { 
    // Do something 
} 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    int count = [textView.text length]; 
    charCount.text = (NSString *)count; 
} 

@end

この場合、重要な文書がUITextFieldDelegateプロトコルの参照であるあなたのヘッダーは次のようになります。

+0

ああ、私はtextView.delgate = selfを意味し、それはViewDidLoadで設定したものです。しかし、それはクラッシュするか、シミュレータのAppをフリーズします。 – CaptnCrash

+0

その行の直前にブレークポイントを設定してそれを実行することはできますか?そうすれば、何が間違っているのかをより正確に把握することができます。 (ビューコントロールの 'textView'アウトレットをIBのビュー自体に接続しましたか?) – Tim

関連する問題