1

から継承したクラスがUITableViewControllerあり、これはルート クラスでもあります。この tableView には 3 つUITableViewCellのカスタム (NIB ファイルからロードされ、サブクラス化されていない) が含まれ、それぞれUITableViewCellに 1 つの がありUITextFieldます。デリゲートメソッドを実装すると

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

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

また、これらの s (の一部である)のcanPerformAction:sender:関数をオーバーライドしたいと考えています。 これを行う方法?UITextFieldUITableViewCell

4

2 に答える 2

1

textField:shouldChangeCharactersInRange:replacementString:メソッドはプロトコルの一部であるためUITextFieldDelegate、これらの s のデリゲートを設定する必要がありますUITextField

たとえば、UITextFieldテーブル ビュー コントローラー コードで を作成し、メソッドが同じコントローラーに実装されていると仮定すると、次のようにすることができます。

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

ただし、UITableViewCellXIB ファイルから s をロードしていると言います。何らかの方法でコード内から s にアクセスし、それらのメソッドUITextFieldを呼び出す必要があります。のプロパティsetDelegate:を使用してこれを行うことができます。例えば:UIViewsubviews

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

コードで s を作成するUITextField方がはるかに簡単でエレガントですが、私見です。

メソッドのオーバーライドに関しては、そのためcanPerformAction:sender:にサブクラス化する必要がありますUITextField

于 2009-07-18T02:09:09.153 に答える
0

このクラスは UITextFieldDelegate ですか? より多くの情報、ソースなどを提供する必要があります....イベントを取得していないという事実は、問題がNIBに欠けていることだと私に思い込ませます。この正確な理由から、IB や NIB は何にも使用しません。問題のデバッグは非常に困難になります。おそらくあなたのXMLを投稿してください

于 2009-07-18T02:10:19.467 に答える