0

次のコードがあります。

@interface MyCell : UITableViewCell<UITextFieldDelegate>
{
    IBOutlet UITextField *txtFields;
}

- (IBAction)textFieldAction:(id)sender;
@property (nonatomic,retain) IBOutlet UITextField *txtFields;

@end

次のデリゲート関数もあります。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    return NO;
}

ただし、決して呼び出されていないことに気付きました。次のように、インターフェースビルダーとコードからデリゲートを設定しました[txtFields setDelegate:self];が、どちらも機能していないようです。これに欠けているものは他にありますか?

4

2 に答える 2

6

明らかにこれを a と組み合わせて使用​​していUITableViewます。まず、ユーザーの操作をサポートする場合、txtFields はcontentViewbackgroundView ではなく、セルの のサブビューである必要があります。

txtFields オブジェクトが のサブビューであると仮定してcontentView、接続を見てみましょう。

tableView にはcellForRowAtIndexPath:、新しいセルまたはリサイクルされたセルを返すメソッドがあります。そのセルの一番下に、次を追加します。

NSLog(@"textFields=%@ delegate=%@", cell.txtFields, cell.txtFields.delegate);
assert(cell.txtFields.delegate == cell); // lets make sure this is proper

実際に両方の引数が存在する場合、txtFields オブジェクトが適切なコンテナー ( contentView) にあり、プロパティが機能しており、デリゲートがセルに設定されていることがわかります。

それがすべて適切で、タップしてもキーボードが表示されない場合は、他の何かが txtFields をオーバーレイしている可能性があります - 他の透明なビューとその接触を食べています。

その場合、MyCell クラスを使用して、問題を示すハードコーディングされたセルを 1 つでも含む小さなデモ アプリを一緒に投げてから、それを (圧縮して) DropBox アカウントにアップロードし、私のような他の人がそれを見て見つけられるようにする必要があります。問題。

于 2012-09-12T22:41:33.543 に答える
0

削除してみてください:

{ IBOutlet UITextField *txtFields; }

あなたは@propertyすでに持っているので。

また、あなたは@synthesize txtFields;

于 2012-09-13T14:04:12.823 に答える