2014-02-12 4 views
1

Im пытается иметь 2 вида таблицы на одном и том же представлении. Оба они находятся в пределах одного UIViewController, который реализует UITableViewDelegate и Datasource. одно из табличных представлений статично, а другое - динамическое. Динамическое представление таблицы очень просто загружается с использованием методов из своего источника данных, но статический отображается пустым. Обычно я удаляю методы источника данных из контроллера, поэтому статический TableView не переопределяет то, что уже сделано на раскадровке, но теперь я не могу, потому что эти методы используются динамическим TableView.Два UITableViews в том же UIViewController

Как я могу использовать оба устройства под тем же контроллером?

ответ

0

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

- (UITableViewCell *)tableView:(UITableView *)inTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(inTableView == tableView1) 
    { 
     ... 
    } 
    else if 
     ... 
} 

Поместите этот тип логики в каждую таблицу. Функция делегата.

+0

Да, я делаю это .... Дело в том, что у меня есть 3 вида таблиц, и это то, что я делаю, проблема со статической, потому что статические методы таблицы не нужно кодировать, поэтому вы просто удалите коды источника данных, и он работает.то, что я хочу, является одним из следующих: какой должен быть код внутри (если static_table), как я говорю ему использовать ячейки, определенные на раскадровке? или как мне назначить ему другой источник данных? –

+0

Я не использую раскадровку, поэтому я действительно не знаю, как помочь вам в решении этой проблемы. Самое простое решение - создать класс tableviewdelegate для этого только и настроить специальные методы делегата там, где не используются другие две динамические таблицы. – Putz1103

+0

спасибо, я очень помог мне :) плохо попробую позже –

1

Как Putz говорит, вы можете настроить ваш контроллер представления для управления 2 представления таблиц путем создания источника данных и методов делегата, чтобы проверить вид таблицы, которая передается в.

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

Хитрость заключается в том, чтобы добавить два вида контейнера к контроллеру вашего вида, который будет содержать 2 вида таблиц, и встроить в каждый вид контейнера другой UITableViewController. Затем каждый вид таблицы управляется собственным контроллером табличного представления. У меня есть проект github, который делает именно это: https://github.com/DuncanMC/test

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

1

Вот самый простой вариант, который позволяет вам сохранить единый виртуальный канал для вашего делегата/источника данных:

Установить как tableviews делегат и источник данных к вашему UIViewController.

Ctrl-перетаскивание из одной из статических ячеек в ваш .h-файл и создание коллекции IBOutlet (здесь staticCellsCollection). Добавьте каждую статическую ячейку к этой коллекции, соблюдая порядок, это будет важно.

Реализовать cellForRowAtIndexPath: таким образом:

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

    if (tableView == _dynamicTableView) { 
     // Do your dynamic thing 
    } 

    else if (tableView == _staticTableView) { 
     // Return the static cells one by one 
     // Here the static TV has only one section, and all cells are in staticCellsCollection 
     return staticCellsCollection[indexPath.row]; 
    } 

} 

Кроме того, необходимо адаптировать numberOfRowsInSection и numberOfSectionInTableView, но это довольно простой (проверьте, какая таблица просит, и возвращать соответствующие значения, например staticCellsCollection.count для числа строк статическое ТВ).

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

+0

У меня есть идея и кажется довольно приятной: O, не могли бы вы рассказать больше о том, как я добавляю ячейки в staticcellscollection. –

+0

Вы управляете перетаскиванием первой ячейки статическое ТВ из вашей раскадровки в ваш .h-файл, так же, как вы обычно создаете IBOutlet. Вместо создания розетки вы создаете коллекцию выходных файлов (вы можете изменить ее в маленьком всплывающем окне, когда вы отпустите ctrl-drag). Затем, для каждой другой ячейки, вы ctrl-перетаскиваете из ячейки в ту же коллекцию выпусков, которую вы только что создали – rdurand

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