Как да добавя множество изгледи на таблици към контролер за изглед

Тъй като въпросът пита, бих искал да знам как да направя няколко контролера за изглед на таблица на един и същ контролер за изглед. Съжалявам за форматирането, но в крайна сметка добавих сегментирана функция за промяна на контрола, която ще зададе кои изгледи на таблици са скрити и кои се показват. Затова бих искал да знам как да отделя и изграждам моите изгледи на таблици, за да направя следното. Или ако можете да ми кажете как да променя данните, които влизат в табличния изглед, като изберете различна опция на сегментирания контролер, това също ще помогне. Благодаря

@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 и няколко UITableViewControllers са вграден начин за това.

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];
}

DataSource на tableView ще се обнови и във вашите различни dataSource и делегирани методи ще използва тази парадигма:

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