Как добавить несколько табличных представлений в контроллер представления

Поскольку вопрос задает, я хотел бы знать, как сделать несколько контроллеров табличного представления на одном и том же контроллере представления. Извините за форматирование, но в конце концов я добавил функцию изменения сегментированного элемента управления, которая будет устанавливать, какие табличные представления скрыты, а какие отображаются. Следовательно, я хотел бы знать, как разделить и построить представления таблицы, чтобы сделать следующее. Или, если вы можете сказать мне, как изменить данные, которые попадают в табличное представление, выбрав другой параметр на сегментированном контроллере, это также поможет. Спасибо

@implementation SecondViewController{
NSDictionary *beerContents;
NSArray *beerNames;
NSDictionary *wineContents;
NSArray *wineNames;

}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.


    NSURL *beerUrl = [[NSBundle mainBundle] URLForResource:@"BEER2"       withExtension:@"plist"];
beerContents = [NSDictionary dictionaryWithContentsOfURL:beerUrl];
beerNames = beerContents.allKeys;


NSURL *wineUrl = [[NSBundle mainBundle] URLForResource:@"Wine" withExtension:@"plist"];
wineContents = [NSDictionary dictionaryWithContentsOfURL:wineUrl];
wineNames = wineContents.allKeys;

}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [beerNames count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:   (NSIndexPath *)indexPath{

UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
cell.textLabel.text = beerNames[indexPath.row];

    return cell;
}


- (IBAction)segmentChanged:(id)sender {
if (_drinkChoice.selectedSegmentIndex == 0) {
    [_beerTableVIew setHidden: NO];
}
if (_drinkChoice.selectedSegmentIndex ==1) {
    [_beerTableVIew setHidden:YES];
}

} @конец


person user2446334    schedule 13.04.2014    source источник


Ответы (2)


Табличное представление — это просто представление. Нет ничего плохого в том, чтобы иметь более одного. Каждому нужен источник данных и делегат; это могут быть разные объекты или они могут быть одним и тем же объектом, но в этом случае ясно, что каждый источник данных и делегат должны будут смотреть на параметр tableView:, чтобы отличить разные представления таблицы и предоставить соответствующий ответ.

Например:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    // return an answer that depends somehow on what `tableView` is
}

С другой стороны... можно возразить, что вместо сегментированного элемента управления и нескольких табличных представлений UITabBarController и несколько UITableViewController являются встроенным способом сделать это.

person matt    schedule 13.04.2014
comment
Я понимаю, о чем вы говорите, но у меня уже есть приложение с вкладками, и это уже должно быть одним из представлений с вкладками. Основываясь на том, что вы написали изначально, как бы я назвал одно против другого - person user2446334; 13.04.2014
comment
Я бы использовал подклассы UITableView. Теперь вы можете идентифицировать табличное представление по его class. - person matt; 13.04.2014

Если я понимаю, чего вы пытаетесь достичь, я думаю, что лучший подход - просто использовать один UITableView и перезагружать его данные при изменении сегментированного элемента управления.

- (IBAction)segmentChanged:(id)sender {
    [self.tableView reloadData];
}

Источник данных tableView будет обновляться, и в ваших различных методах источника данных и делегата используется эта парадигма:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    // return an answer based upon the active section
}
person Brody Robertson    schedule 13.04.2014