Мы делаем это с помощью одного табличного представления, а затем выполняем оператор if / case в каждом методе обратного вызова табличного представления, чтобы получить правильные данные на основе того, какое значение выбрано в сегментированном элементе управления.
Сначала добавьте segmentedControl в titleView и установите функцию обратного вызова при его изменении:
- (void) addSegmentedControl {
NSArray * segmentItems = [NSArray arrayWithObjects: @"One", @"Two", nil];
segmentedControl = [[[UISegmentedControl alloc] initWithItems: segmentItems] retain];
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.selectedSegmentIndex = 0;
[segmentedControl addTarget: self action: @selector(onSegmentedControlChanged:) forControlEvents: UIControlEventValueChanged];
self.navigationItem.titleView = segmentedControl;
}
Далее, когда изменяется сегментированный элемент управления, вам нужно загрузить данные для нового сегмента и сбросить табличное представление, чтобы отобразить эти данные:
- (void) onSegmentedControlChanged:(UISegmentedControl *) sender {
// lazy load data for a segment choice (write this based on your data)
[self loadSegmentData:segmentedControl.selectedSegmentIndex];
// reload data based on the new index
[self.tableView reloadData];
// reset the scrolling to the top of the table view
if ([self tableView:self.tableView numberOfRowsInSection:0] > 0) {
NSIndexPath *topIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView scrollToRowAtIndexPath:topIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
}
}
Тогда в ваших обратных вызовах tableView вам нужно иметь логику для каждого сегмента, чтобы получить правильные значения. В качестве примера я покажу один обратный вызов, а остальное реализуем так:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"GenericCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"GenericCell" owner:self options:nil] objectAtIndex: 0];
}
if (segmentedControl.selectedSegmentIndex == 0) {
cell.textLabel.text = @"One";
} else if (segmentedControl.selectedSegmentIndex == 1) {
cell.textLabel.text = @"Two";
}
return cell;
}
Вот и все, надеюсь, это поможет.