2016-12-22 3 views
0

Я хочу создать несколько экземпляров UITableView. У меня есть табуляция в контроллере просмотра и на каждом элементе табуляции мне нужно загрузить табличное представление с данными, поступающими из веб-службы. У меня есть Tableview, созданный с помощью раскадровки.Как создать несколько экземпляров UitableView?

  1. Каждый экземпляр вида таблицы будет иметь разные данные.
  2. При нажатии кнопки uitabbaritem соответствующий экземпляр tabbleview должен перезагрузиться.

Я не хочу использовать UITabBarController. Все, что я хочу сделать, это использовать единый контроллер представления и отдельный просмотр таблицы.

Также я смущен своим подходом. Является ли полезным использовать контроллер единого вида, поскольку мне нужно обновлять табличное представление? По-моему, использование UItabbarcontroller будет ненужным.

+2

@VladHatko Ну, честно говоря, вы можете использовать один и тот же вид таблицы и просто загрузить два набора данных внутрь. – JAL

+0

@Rohit palod Если вы создаете несколько tableView, вы должны учитывать, что память более одного, используйте один tableView, вы можете загружать несколько источников данных при переключении элемента. использование нескольких табличных представлений не рекомендуется, но вы также можете установить isHidden, чтобы перенаправить ваше требование. – aircraft

+0

TableView - элементы интерфейса. Вы используете 'UITableViewDataSource' для предоставления данных и настройки для таблицы. Если оба экрана одинаково похожи на данные, используемые табличным представлением, вы должны использовать одну таблицу и манипулировать используемыми ею данными. – Connor

ответ

0

Исходя из вашего требования. Лучшим вариантом использования панели вкладок является одновременное обращение и поддержка нескольких экземпляров. Представьте себе такую ​​ситуацию, как вы работаете над приемом пищи. Для каждой вкладки вы должны показывать разные параметры, загруженные в tableview. Все вкладки поддерживают разные состояния табличных представлений. Где, как сохранение вещей в одном контроллере представления, необходимо обновить и заменить старые данные, чтобы получить новые данные в изображение. Здесь каждый раз требуется загрузить данные таблицы. Поэтому, исходя из вашего требования, подумайте об использовании панели вкладок или нет. Если вы не хотите поддерживать разные состояния нескольких табличных представлений сразу, перейдите для SingleView Controller и Single Tableview.

+0

То же самое я упомянул в ответ на комментарий @ConnorNeville. Я знаю, что неплохо использовать одну и ту же таблицу для нескольких вкладок, каждый раз мне приходится перезагружать таблицу. Вот почему я попросил несколько экземпляров сделать переход с одной вкладки на другую, не нужно перезагружать таблицу. –

0

Вы можете сохранить только один экземпляр UITableView и использовать выбор полосы вкладок, чтобы решить, какой источник данных использовать для него. Вот рабочий пример, с настройкой контроллера представления в раскадровке, чтобы содержать панель вкладок и одно представление таблицы.

#import "ViewController.h" 

@interface ViewController() <UITableViewDataSource, UITabBarDelegate> 

@property(weak,nonatomic) IBOutlet UITableView *tableView; 
@property(weak,nonatomic) IBOutlet UITabBar *tabBar; 
@property(strong,nonatomic) NSArray *model; 

@end 

Наша модель представляет собой три массива, по одному для каждой вкладки в панели вкладок. Эти массивы жестко закодировать инициализируются здесь, но может также быть инициализированы с помощью веб-службы ...

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSArray *dataSource0 = @[ @"A", @"B", @"C" ]; 
    NSArray *dataSource1 = @[ @"1", @"2", @"3"]; 
    NSArray *dataSource2 = @[ @"doh", @"ray", @"me"]; 
    self.model = @[ dataSource0, dataSource1, dataSource2 ]; 

    self.tabBar.selectedItem = self.tabBar.items[0]; 
} 

// the user pressed a tab, reload the table 
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { 
    [self.tableView reloadData]; 
} 

// this is an important part: our data for the table is determined by 
// which tab is selected, return of the arrays, corresponding to the selection 
- (NSArray *)currentDataSource { 
    UITabBarItem *item = self.tabBar.selectedItem; 
    NSInteger index = [self.tabBar.items indexOfObject:item]; 
    return self.model[index]; 
} 

// these datasource methods always refer to the currentDataSource 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [self currentDataSource].count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 
    NSString *text = [self currentDataSource][indexPath.row]; 
    cell.textLabel.text = text; 
    return cell; 
} 

@end 
+0

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

+0

Теперь я понимаю, почему вы задали вопрос: вы неправильно поняли смысл перезагрузки таблицы. Это не означает получение данных снова. Это означает только перерисовку видимых клеток.Пользователь этого не увидит. Это занимает примерно столько же времени, сколько один кадр видео. Извлеките данные, когда появится vc (или раньше). Изменение содержимого таблицы и перерисовки происходит в одном цикле цикла запуска – danh

Смежные вопросы