Привет там я использующий сегментированный контроль над представлением. С помощью этого сегментированного контроля я хотел бы показать к различным столам согласно моей точке зрения, предположим, что у меня есть два сегмента в моем столе на сигнале сегмента 1, я хотел бы показать таблицу 1, и на сигнале сегмента 2 я хотел бы показать таблицу 2, моя таблица 1 - Простая таблица, и таблица 2 - сгруппированная таблица, Apple использует подход, чтобы показать differnt приложения в differnt категориях на App Store, но я не уверен, как я делаю это. Пожалуйста, предложите любой подход, или любой пример кода для того же будет также ценивший.
Песчаное спасибо
Мы делаем это, имея единую таблицу, а затем выполнение оператора IF / CASE в каждом методе обратного вызова таблицы для возврата правильных данных, основанных на том, какое значение выбрано в сегментированном элементе управления.
Во-первых, добавьте SEGMEGEDCONTONTROL в 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];
}
}
Тогда в вашей табличном обратном вызовах вам необходимо иметь логику за значение сегмента, чтобы вернуть правильную вещь. Я покажу вам один обратный вызов в качестве примера, но реализуйте все остальные:
- (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;
}
Это об этом, надеюсь, это поможет.
Другой альтернативой является представление контейнера, которое вы добавляете в зависимости от того, какая из tableView
является текущей в виде субвью. Вы даже можете сделать так, чтобы каждая таблица находилась в отдельном контроллере представления, чтобы вещи были разделены, создав контроллеры представления таблицы, а затем добавив .view как вложенное представление контейнера, но если вы это сделаете, вам придется вручную вызывать viewWillAppear
и viewWillDisapear
(что не очень сложно, так как вы просто вызываете их при замене таблиц при нажатии на сегментированный элемент управления).