0

我正在使用主从模板。我在详细视图中有一个分段控件,并且我已将 MasterViewController 设置为委托。这使我能够给用户选择。我知道分段控件正在工作并将选择传递给 MVC。

我希望每个选择都能触发一组新数据,然后可以将其加载到 MasterViewController 中的表视图中。我的问题是我找不到更新表格视图中数据的方法。

4

2 回答 2

0

您可以使用声明的实例变量在更改MasterViewController时进行更新UISegmentedControl。基于此,当你回到MasterViewController; 用它viewWillAppear[tableView reloadData]

告诉我我是否把你的问题弄错了

编辑:

取个名字integersegmentIndex;在 Segment 更改时更新。根据需要显示的segmentIndex负载值dataSourceUITableViewMasterViewController

编辑2:

UISegmentedControl' 值改变时,放mvc.segmentIndex = (currentValueOfYourSegmentedControl); 然后在MasterViewController'sviewWillAppear

switch (self.segmentIndex)
{
    case 0:
           // Set Datasource for First Choice.
           break;
    case 0:
           // Set Datasource for Second Choice.
           break;
    case 0:
           // Set Datasource for Third Choice.... and so on...
           break;
    default:
           // Default Behavior
           break;
}

希望你明白我的意思。

于 2013-02-07T12:23:04.203 回答
0

如果是我,我会使用通知而不是代表。即使用detailViewController 中的valueChanged 检测segmentedControl 值的变化,然后从masterViewController 接收的detailViewcontroller 中发布一个NSNotification。

最简单的方法是:

[[NSNotificationCenter defaultCenter] postNotificationName:@"segmentOneChosen" object:nil userInfo:nil];

你有 masterViewController 注册这个通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(segmentOneChosen) name:@"segmentOneChosen" object:nil];

最好将所选值与通知一起传递,这样您就不需要为每个段单独通知。

!!未经测试的代码:

NSArray *keys = [NSArray arrayWithObjects:@"segmentChosen", nil];
NSArray *objects = [NSArray arrayWithObjects:[NSNumber numberWithInt:self.topicsChoiceSegControl.selectedSegmentIndex], nil];
NSDictionary * dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
[[NSNotificationCenter defaultCenter] postNotificationName:@"segmentChosen" object:nil userInfo:dict];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(segmentChosen:) name:@"segmentChosen" object:nil];

-(void) segmentChosen:(NSNotification *)notification {
    NSNumber *segmentChosenNum = [[notification userInfo] valueForKey:@"segmentChosen"];
}

我知道这本身并不能回答您的问题,但它确实为您试图克服的问题提供了另一种解决方案。

于 2013-02-07T14:07:53.513 回答