Должны приблизиться, чтобы показать столы, используя сегментированный контроль?

Привет там я использующий сегментированный контроль над представлением. С помощью этого сегментированного контроля я хотел бы показать к различным столам согласно моей точке зрения, предположим, что у меня есть два сегмента в моем столе на сигнале сегмента 1, я хотел бы показать таблицу 1, и на сигнале сегмента 2 я хотел бы показать таблицу 2, моя таблица 1 - Простая таблица, и таблица 2 - сгруппированная таблица, Apple использует подход, чтобы показать differnt приложения в differnt категориях на App Store, но я не уверен, как я делаю это. Пожалуйста, предложите любой подход, или любой пример кода для того же будет также ценивший.

Песчаное спасибо

11
задан Thomas Zoechling 16 January 2010 в 17:14
поделиться

2 ответа

Мы делаем это, имея единую таблицу, а затем выполнение оператора 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;
}

Это об этом, надеюсь, это поможет.

26
ответ дан 3 December 2019 в 03:04
поделиться

Другой альтернативой является представление контейнера, которое вы добавляете в зависимости от того, какая из tableView является текущей в виде субвью. Вы даже можете сделать так, чтобы каждая таблица находилась в отдельном контроллере представления, чтобы вещи были разделены, создав контроллеры представления таблицы, а затем добавив .view как вложенное представление контейнера, но если вы это сделаете, вам придется вручную вызывать viewWillAppear и viewWillDisapear (что не очень сложно, так как вы просто вызываете их при замене таблиц при нажатии на сегментированный элемент управления).

3
ответ дан 3 December 2019 в 03:04
поделиться