2009-07-18 12 views
1

私はUITableViewControllerから継承したクラスを持っていますが、これもルートクラスです。このテーブルビューには、3つのカスタムUITableViewCell(NIBファイルからロードされ、サブクラス化されていない)が含まれ、各UITableViewCellにはUITextFieldが1つあります。今すぐデリゲートメソッドを実装するときUITableViewCellとUITableViewの問題を解決するにはどんな解決策ですか?

- (BOOL)textField:(UITextField *)textField 
     shouldChangeCharactersInRange:(NSRange)range 
     replacementString:(NSString *)string 

私はイベントを受け取りません。この関数は決して解けません。他のデリゲートメソッドも実装しようとしましたが、どれも起動しませんでした。これらのデリゲートメソッドを起動するには?

これらのUITextFieldUITableViewCellの一部です)のcanPerformAction:sender:機能もオーバーライドしたいと思います。
これを行う方法は?

答えて

1

textField:shouldChangeCharactersInRange:replacementString:メソッドはUITextFieldDelegateプロトコルの一部なので、UITextFieldの代理人を設定する必要があります。例えば

、あなたのテーブルビューcontollerコードでUITextField Sを作成し、この方法は、同じcontollerに実施されたと仮定した場合、あなたはこれを行うことができますが:

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(x,y,w,h)]; 
[textField setDelegate:self]; 

しかし、あなたは「あなたを言いますXIBファイルからUITableViewCellを読み込みます。コード内から何とかUITextFieldにアクセスして、setDelegate:メソッドを呼び出さなければなりません。 UIViewsubviewsプロパティを使用してこれを行うことができます。

UIViewController *controller = [[UIViewController alloc] initWithNibName:@"foo" bundle:nil]; 
UITextField *textField = (UITextField *)[[controller.view subviews] objectAtIndex:0]; 

コードでUITextField Sの作成は非常に簡単に、よりエレガントですが、私見:たとえば。

canPerformAction:sender:メソッドをオーバーライドするには、UITextFieldをサブクラス化する必要があります。

+0

おかげであなたのヒントのバークは、本当に役立ちます。 objectAtIndexで渡すインデックス値はどのようにして見つけられますか?ここでは値を0として渡すことを示しています。常に0になりますか?私はtableviewcell、ラベル、テキストフィールドと1つのボタンで3つのコントロールを持っています。申し訳ありませんが基本的な質問ですが、私はiPhoneのプログラミングに新しいです。 – iamMobile

+0

それは、サブビューを追加する順番によって異なりますが、XIBファイルにサブビューを追加するので、0から2まで試してみてください。コードでUITableViewCellsを作成するのではなく、 Interface Builderでは、より良い方法です。できればそれを試してください、それは良い運動になります。 –

0

このクラスはUITextFieldDelegateですか?あなたは、より多くの情報、ソース等を提供する必要があります.... 事実はあなたが問題を起こさないということは、NIBの何かが欠けているということです。私はIBやNIBを何らかの理由で使っていないので、デバッグの問題は本当に難しくなります。おそらくあなたのXMLを投稿してください

+0

RootViewControllerはUITextFieldDelegateのデリゲートです。xmlファイルが600文字を超えているので、ここに投稿できません。 XMLファイルをアップロードするには? – iamMobile

関連する問題