我已经创建了一个自定义 TablePickerViewController ,它是 UITableViewController 的子类。我正在使用此类显示自定义类型 TablePickerItem 的对象列表。
我在iOS应用程序中多次使用 TablePickerViewController 来显示用户必须选择项目的不同类型的列表 - 然后是另一个视图控制器 MainViewController 应该对这个选择做出反应并做点什么。
我已经创建了这个协议,并在 TablePickerViewController 中创建了一个委托属性:
@protocol TablePickerViewControllerDelegate <NSObject>
- (void)tablePickerViewController:(TablePickerViewController *)controller
didSelectItem:(TablePickerItem*)item;
@end
当我在 MainViewController 中设置新的 TablePickerViewController 时,它也被设置为委托 - 而当用户点击表格视图中的单元格时会通知它。 / p>
问题是我的 MainViewController 会使用不同的数据( TablePickerItem )设置多个 TablePickerViewController 。我应该如何设置我的 MainViewController 来处理这些多个 TablePickerViewController ?来自每个事件的事件将导致在我的 MainViewController 中调用相同的协议方法。
此外,我需要获取 TablePickerItem 所代表的元素,因为我需要知道在tablePickerViewController:didSelectItem
方法中执行时的元素ID。我应该通过向 TablePickerItem 添加@property (nonatomic) id element
之类的内容来处理此问题,并将原始对象设置为此属性然后创建它吗?
如果我的解决方案似乎以错误的方式完成,也许有人可以给我一个关于如何创建通用表视图控制器的示例。
答案 0 :(得分:0)
我不完全确定你的设置,但是如果你有多个选择器反馈到主控制器,那么你可以只提到一个选择器,例如。
// MainViewController.m
@interface MainViewController ()
@property (nonatomic, strong) TablePickerViewController *picker1;
@property (nonatomic, strong) TablePickerViewController *picker2;
// ... and so on. Obviously you know your problem domain so you can change
// the terrible naming above to something appropriate
@end
@implementation MainViewController
// ...
- (void)theMethodWhereYouSetUpYourPickers;
{
TablePickerViewController *picker1 = [[TablePickerViewController alloc] init];
picker1.delegate = self;
self.picker1 = picker1;
// ...
}
- (void)tablePickerViewController:(TablePickerViewController *)controller
didSelectItem:(TablePickerItem*)item;
{
if (controller == self.picker1) {
NSLog(@"Something was picked in picker 1 %@", item);
} else if (controller == self.picker2) {
NSLog(@"Something was picked in picker 2 %@", item);
}
}
// ...
@end