在我的UITableViewController子类的 tableView:cellForRowAtIndexPath:实现中,我正在使用此代码片段:
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;
不幸的是 scrollViewDelegate 在此 AlarmPicker 实例中始终为null,因此根本不会调用已实现的委托方法。
解决方法是将 UIScrollViewDelegate 方法实现放入执行alloc和init的类中:
...
alarmPicker.scrollViewDelegate = self;
...
但那将是一个非常糟糕的解决方案。
为了告诉 AlarmPicker 实例它应该将自己用作代理,我该怎么做?
答案 0 :(得分:1)
您是否有理由不能在AlarmPicker类中编写returnScrollView.delegate = self
?
我没有看到为什么你的scrollViewDelegate成员在这里没有任何理由,除非在你的init方法中发生了行returnScrollView.delegate = self.scrollViewDelegate;
,在这种情况下你可以将它移动到以后的方法或传递所需的委托在你的AlarmPicker的init方法中。