2015-02-14 5 views
0

Я создал собственный виджет как файл XIB, где у меня есть несколько UITableView s и UIButton. В соответствующем быстром файле, который является владельцем этого XIB, у меня есть выходы для этих TableView.Использование нескольких UITableViews в XIB

Я добавил этот виджет для просмотра внутри вида в UIViewController. Теперь в соответствующем быстром файле этого контроллера мне нужно назначить dataSource и delegate для каждого из табличных представлений и действие к кнопке.

Я искал в Интернете долго, и кажется, что @IBInspectablevar s являются путь, но кажется, что я не могу сделать вар, который типа UITableView, UITableViewDelegate или UITableViewDatasource как @IBInspectable.

Итак, как использовать таблицы и кнопку? Может ли кто-нибудь направить меня к правильной документации, например, или объяснить?

ответ

1

Не нужно использовать @IBInspectable. Вы можете просто использовать каждый источник таблицы в рамках методов UITableViewDelegate условно. Вот один из способов сделать это:

Сначала введите UITableViewController в раскадровку, добавьте прототип ячейки, затем внутри этой ячейки прототипа добавьте UITableView со своей собственной прототипной ячейкой.

Затем установить оба повторного использования идентификаторов внутренней и наружной вид таблицы ячейки, как так:

Внешний вид ячейки таблицы: Outer table view cell reuse identifier

Внутренний вид ячейки таблицы: Inner table view cell reuse identifier

Тогда свяжите этот источник данных внутреннего табличного представления и делегируйте его с собственным источником данных и делегатом UITableViewController:

Link data source and delegate #1 Link data source and delegate #2

Тогда в вашем UITableViewController классе, вы можете установить элементы ваших таблиц условно, например:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    dataSource1 = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", nil]; 
    dataSource2 = [NSArray arrayWithObjects:@"a", @"b", @"c", nil]; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (tableView == self.tableView) { 
     return 80; 
    } else { 
     return 20; 
    } 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    // Return the number of rows in the section. 
    if (tableView == self.tableView) { 
     return dataSource1.count; 
    } else { 
     return dataSource2.count; 
    } 
} 

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

    UITableViewCell *cell; 

    if (tableView == self.tableView) { 
     cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier" forIndexPath:indexPath]; 
    } else { 
     cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier2" forIndexPath:indexPath]; 
    } 

    // Configure the cell... 
    if (tableView == self.tableView) { 
     cell.textLabel.text = [dataSource1 objectAtIndex:indexPath.row]; 
    } else { 
     cell.textLabel.text = [dataSource2 objectAtIndex:indexPath.row]; 
     cell.backgroundColor = [UIColor blueColor]; 
    } 
    cell.textLabel.backgroundColor = [UIColor clearColor]; 

    return cell; 
} 

Что в этом случае дает следующий результат: Final result

+0

Поэтому мне придется сделать это в подклассе 'UITableViewController'. Как мне связать «table1» и «table2» с xib? – rgamber

+0

@rgamber Нет, не нужно делать это в подклассе UITableViewController. Я уточню свой ответ, чтобы уточнить. –

+0

@ rgamber Обновлено –

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