2015-08-04 2 views
0

У меня есть layout, в котором у меня будет 2 UITableViews с обычным cells. Второй UITableView должен быть внутри первого.Как настроить UITableView внутри пользовательского UITableViewCell в раскадровке?

Мой вопрос: как делегировать второй UITableView?

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

Или я должен делегировать его внутри пользовательских UITableViewCell из первых UITableView?

Любые рекомендации приветствуются.

EDIT: Я не знаю, как реализовать решения здесь, потому что у меня есть Storyboard. Внутри моего тока UIViewController я установил delegate и dataSource из первого UITableView в контроллер View View.

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

Где и как установить тогда в IB?

ответ

1

Вы просто проверить состояние таблицы для каждого метода делегата

Используйте этот код, чтобы зарегистрировать пользовательскую ячейку.

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if(tableView == self.yourFirstTable) 
{ 
    CustomCell *cell=[tableView dequeueReusableCellWithIdentifier:@"cellModifier"]; 
    // your code 
} 
else 
{ 
    // second table cell code 
} 
return cell; 
} 



-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    { 
     if(tableView == self.yourFirstTable) 
     { 
      // first tableView number of row return 
     } 
     else 
     { 
      // second table number of row return 
     } 
    } 

И создать прототип ячейки в TableView

enter image description here

И Set CellReusableId как этот путь

enter image description here

+0

Извините, что я уже знаю это. Моя проблема заключается в том, как настроить 'datasource' и' делегировать 'второго 'UITableView' - какой объект должен быть настроен для них. – new2ios

+0

Ах, хорошо. Я думал, что это может быть решением, но я не был уверен, что он сработает. 10x. Я попробую, и если все будет в порядке, я приму ответ. – new2ios

+0

Извините @Dharmesh Dhorajiya, но я что-то упустил - где установить делегат для второго 'UITableView' - на ViewController или на первом' UITableView'. Также где установить выход для второго 'UITableView'? – new2ios

2

Мой ответ

For identifying two table view data source and delegate method is,better to set tag for the table views. 

Установите эту ниже кодировку в свой метод делегатов tableview.

if(tableView.tag==0) 
{ 
} 
else 
{ 
} 

Также вы можете изменить это, присвоив этому виду таблицы другое имя.

if(tableView==FirstTableView) 
{ 
} 
else 
{ 
} 
3

Гораздо лучшим решением было бы абстрагировать DataSource и реализации Делегирование далеко от контроллера зрения, так что они могут быть персонализированным в Tableview по мере необходимости (обратите внимание, что код взят из objc.io статья Lighter View Controllers.

Например,

@implementation ArrayDataSource 

- (id)itemAtIndexPath:(NSIndexPath*)indexPath { 
    return items[(NSUInteger)indexPath.row]; 
} 

- (NSInteger)tableView:(UITableView*)tableView 
numberOfRowsInSection:(NSInteger)section { 
    return items.count; 
} 

- (UITableViewCell*)tableView:(UITableView*)tableView 
     cellForRowAtIndexPath:(NSIndexPath*)indexPath { 
    id cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier 
               forIndexPath:indexPath]; 
    id item = [self itemAtIndexPath:indexPath]; 
    configureCellBlock(cell,item); 
    return cell; 
} 

@end 

Тогда вы могли бы использовать его следующим образом:

void (^configureCell)(PhotoCell*, Photo*) = ^(PhotoCell* cell, Photo* photo) { 
    cell.label.text = photo.name; 
}; 
photosArrayDataSource = [[ArrayDataSource alloc] initWithItems:photos 
               cellIdentifier:PhotoCellIdentifier 
              configureCellBlock:configureCell]; 
self.tableView.dataSource = photosArrayDataSource; 

Тот же процесс может сопровождаться с реализациями UITableViewDelegate, чтобы предоставить вам с очень чистой, отделенной и отсоединена кода. Ваше требование к двум табличным представлениям будет по существу проще реализовать.

+0

Я согласен с вами, но я одобрю другой ответ, потому что я его реализовал. – new2ios

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