0

tableView:cellForRowAtIndexPath: UITableViewController サブクラスの実装では、次のコード スニペットを使用しています。

AlarmPicker *alarmPicker = [[AlarmPicker alloc] init];
alarmPicker.scrollViewDelegate = alarmPicker;
[cell.contentView addSubview:alarmPicker.view];

AlarmPickerは、さまざまなUIScrollViewDelegateメソッドを実装しています。

AlarmPicker.hでは、次のようにscrollViewDelegateを宣言しています。

@property (assign) id<UIScrollViewDelegate> scrollViewDelegate;

これは、 AlarmPickerの実装部分で使用されています。

UIScrollView *returnScrollView = [[UIScrollView alloc] init];
...
returnScrollView.delegate = self.scrollViewDelegate;

残念ながら、このAlarmPickerインスタンスではscrollViewDelegateは常に null であるため、実装されたデリゲート メソッドはまったく呼び出されません。

回避策は、割り当てと初期化を行うクラスにUIScrollViewDelegateメソッドの実装を配置することです。

...
alarmPicker.scrollViewDelegate = self;
...

しかし、それは非常に悪い解決策になります。

AlarmPickerインスタンスに、自身をデリゲートとして使用するように指示するにはどうすればよいですか?

4

1 に答える 1

1

returnScrollView.delegate = selfAlarmPicker クラスに書き込めない理由はありますか?

init メソッドで行が発生していない限り、scrollViewDelegate メンバーがここで nil になる理由はわかりません。returnScrollView.delegate = self.scrollViewDelegate;その場合、それを後のメソッドに移動するか、AlarmPicker の init メソッドで必要なデリゲートを渡すことができます。

于 2012-06-30T18:28:05.490 に答える