我正在使用主从模板。我在详细视图中有一个分段控件,并且我已将 MasterViewController 设置为委托。这使我能够给用户选择。我知道分段控件正在工作并将选择传递给 MVC。
我希望每个选择都能触发一组新数据,然后可以将其加载到 MasterViewController 中的表视图中。我的问题是我找不到更新表格视图中数据的方法。
您可以使用声明的实例变量在更改MasterViewController
时进行更新UISegmentedControl
。基于此,当你回到MasterViewController
; 用它viewWillAppear
来[tableView reloadData]
告诉我我是否把你的问题弄错了。
编辑:
取个名字integer
吧segmentIndex
;在 Segment 更改时更新。根据需要显示的segmentIndex
负载值dataSource
UITableView
MasterViewController
编辑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;
}
希望你明白我的意思。
如果是我,我会使用通知而不是代表。即使用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"];
}
我知道这本身并不能回答您的问题,但它确实为您试图克服的问题提供了另一种解决方案。