Два UITableView в одном представлении - PullRequest
16 голосов
/ 21 апреля 2011

Я хочу знать, разрешено ли использовать несколько UItableView в одном и том же представлении (я ничего не вижу в Руководящих указаниях Apple по человеческому интерфейсу ) и если все в порядке, Как загрузить разные DataSource в viewDidLoad для каждого UITableView?

Ответы [ 6 ]

20 голосов
/ 21 апреля 2011

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

5 голосов
/ 22 апреля 2011

ИМО самым чистым решением было бы иметь один контроллер для каждого просмотра таблицы.

Если вы используете один контроллер для n табличного просмотра, вам придется использовать if-statemenst во многих местах, в

  • – numberOfSectionsInTableView:
  • – tableView:numberOfRowsInSection:
  • – tableView:titleForHeaderInSection:

В основном во всех методах UITableViewDatasource-Protocol, которые вам необходимо реализовать.

Так что, если вам нужно что-то изменить, вы должны изменить это во многих местах.

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

  1. написать класс контроллера для каждого просмотра таблицы, сделать его соответствующим протоколу UITableViewDatasource
    • реализовать методы протокола, которые вам понадобятся.не менее
      • – numberOfSectionsInTableView:,
      • – tableView:numberOfRowsInSection:,
      • – tableView:cellForRowAtIndexPath:
  2. вызов-setDataSource: для каждого представления таблицы для объекта соответствующего класса контроллера

Я написал пример кода: https://github.com/vikingosegundo/my-programming-examples/tree/master/TwoTableViews

TwoTableViewsViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];
    if (firstController == nil) {
        firstController = [[FirstTVContoller alloc] init];
    }
    if (secondController == nil) {
        secondController = [[SecondTVController alloc] init];
    }
    [firstTable setDataSource:firstController];
    [secondTable setDataSource:secondController];

    [firstTable setDelegate:firstController];
    [secondTable setDelegate:secondController];
    firstController.view = firstController.tableView;
    secondController.view = secondController.tableView;
}
5 голосов
/ 21 апреля 2011

Да, вы можете.Проблема в том, что каждый UITableView будет использовать одинаковые UITableViewDataSource и UITableViewDelegate.Поэтому вы должны определить, с каким табличным представлением вы работаете, в каждом из необходимых методов делегата.

Например:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    // make bigger rows

    if (tableView == myBigRowTableView)
    {
        // make bigger rows
        return 127;
    } else if (tableView == mySmallRowTableView) {
        // make smaller rows
        return 20;
    } else {
        return 30;
    } 
}
3 голосов
/ 30 апреля 2012

Вы можете установить тег для каждой таблицы.Затем примените это условие в методе делегата tableview, например:

myTable.tag=12;
1 голос
/ 07 февраля 2013

Вы можете иметь несколько табличных представлений в одном представлении. Добавьте теги к каждому представлению таблицы, и с помощью tableview.tag вы можете загрузить данные в представления таблиц отдельно.

Пример:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
     if (tableView.tag == x) {
        //code to load table view with tag value x

        }
        else{
        //code to load second table
        }
        return cell;

    }
1 голос
/ 21 апреля 2011

Чтобы упростить жизнь, вы можете передать два разных делегата в UITableView.Если вы передадите одного и того же делегата, вам придется делать много операторов if.Создание двух разных делегатов позволит вашему коду быть намного чище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...