2013-05-01 3 views
0

Я работаю с таблицами, показывающими структуру данных иерархии. Я беру первый узел и показываю сыновей в представлении таблицы и повторяю его до конца дерева. Я делаю это так:Создайте новый UITableViewController и покажите его

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if([[actualNode getSonAtIndex:0] sonsCount]>0) { 
    NSLog(@"New level"); 
    actualNode = [actualNode getSonAtIndex:indexPath.row]; 
    [self.tableView reloadData]; 
} else { 
    NSLog(@"Service"); 
    [self performSegueWithIdentifier:@"Service" sender:NULL]; 
} 

Это не правильный путь, но проблема в том, что я не знаю, сколько уровней имеет дерево, так что я не могу создать их в раскадровку. Идея заключается в создании только одного TableView для отображения каждого уровня, но, делая это таким образом, я не могу вернуться к предыдущему уровню на NavBar, как если бы я работал с некоторыми контроллерами в раскадровке, и у меня нет анимации. Итак, есть ли способ сделать это? что-то вроде:

MyNextLevel *nextlevel = [MyNextLevel alloc]; 
[nextlevel setNode: actualNode] 
Myactualtableview = nextlevel; (Here the next level is showed in the screen with animations and with the possibility to go back to the previous level) 

Спасибо.

ответ

1

Вот почему мне не нравятся раскадровки. Всегда можно было делать то, что вы хотите сделать (если я правильно понимаю), но раскадровки отвлекают его; у них нет гибкости в том, чтобы делать что-то в коде, что и требовалось всегда делать в iOS 3 и iOS 4.

Во всяком случае, вы хотите сделать что-то вроде этого:

UITableViewController* tvc = [[MyTableViewController alloc] initWithNibName:@"MyNib" bundle:nil]; 
[self.navigationController pushViewController:tvc animated:YES]; 

Ваш бизнес-логика может просто выбрать класс для MyTableViewController. Кроме того, MyTableViewController может быть чем-то гибким, где между этими двумя строками вы даете ему некоторую конфигурационную информацию, которая заставляет ее показывать правильные данные! (Я должен признать, однако, что вы могли сделать то же самое с помощью раскадровки, настройка контроллера вида таблицы в performSegue:.)

+0

Сначала спасибо за ваш ответ, но я не мог не пытался: I убежища 't создал конкретный файл NIB. Имя моего класса - «NextLevelController» и наследуется от UITableViewController, как я могу узнать, что имя NIB, которое я использую? – Sergiodiaz53

+0

У вас нет * есть * использовать наконечник с UITableViewController; в этом случае просто поставьте нуль в качестве наконечника, а UITableViewController сделает табличный вид по умолчанию и подключит все хорошо. – matt

+0

Если вы * сделаете * хотите использовать наконечник с UITableViewController, тогда при создании подкласса UITableViewController в Xcode вы должны установить флажок, который запрашивает, хотите ли вы наконечник. Таким образом, вы получите правильный тип наконечника, с правильным именем и с табличным видом, и все будет правильно подключено. – matt

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