0

我创建了一个自定义TablePickerViewController,它是UITableViewController的子类。我正在使用此类来显示自定义类型TablePickerItem的对象列表。

我在我的 iOS 应用程序中多次使用TablePickerViewController来显示用户必须选择项目的不同类型的列表——然后另一个视图控制器MainViewController应该对这个选择做出反应并做一些事情。

我创建了这个协议并在TablePickerViewController中创建了一个委托属性:

@protocol TablePickerViewControllerDelegate <NSObject>
- (void)tablePickerViewController:(TablePickerViewController *)controller
                    didSelectItem:(TablePickerItem*)item;
@end

当我在MainViewController中设置一个新的TablePickerViewController时,它也被设置为委托——而不是当用户点击表格视图中的单元格时它会收到通知。

问题是我的MainViewController将使用不同的数据(TablePickerItem )设置多个TablePickerViewController。我应该如何设置我的MainViewController来处理这些多个TablePickerViewController?他们每个人的事件将导致在我的MainViewController中调用相同的协议方法。

此外,我需要获取TablePickerItem表示的元素,因为我需要知道例如在tablePickerViewController:didSelectItem方法中操作时的元素 ID。我是否应该通过向 TablePickerItem 添加类似内容并将原始对象设置到此属性然后创建它来处理@property (nonatomic) id element这个问题

如果我的解决方案似乎以错误的方式完成,也许有人可以给我一个关于如何创建通用表格视图控制器的示例。

4

1 回答 1

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
于 2012-04-22T14:10:46.967 回答