2013-10-01 3 views
0

Я пытаюсь настроить UITableViewController, где каждый элемент в TableView будет нажимать на отдельный ViewController. Я создал массивКак каждый элемент в моем UITableViewController нажимать на отдельный UIViewController

NSArray *[email protected]["NewYork", @"Chicago", @"LosAngeles", @"Miami"]; 

и внедрил его в свой UITableViewController. Затем я нажал на новый UIViewController;

[self.navigationController pushViewController:NewYorkViewController animated:YES]; 

Однако теперь все элементы массива/таблицы видят «NewYorkViewController». Как мне каждый город в массиве/табличном представлении нажать на свой собственный ViewController?

Я создал UIViewController для каждого отдельного города, например. «ChicagoViewController» и т. Д. , и я не использую раскадровки.

ответ

2

Единственный способ, который я могу придумать, - использовать NSDictionary и сопоставить строку ваших городов с каждым классом UIViewController. Затем вы просто используете objectForKey и получите правильный контроллер для каждого ключа.

+0

Можете ли вы показать мне код для чего это будет? – rivtracks

0

Почему вы это делаете? Нажатие на отдельный viewController является пустой тратой времени. Просто сделайте detailViewController и переместите данные от одного к другому. В коде вы можете делать все, что хотите, viewController. Из-за нажатых данных вы можете решить, какой из tab нажат. Удачи;)

0

Вы можете создать экземпляр ваши четыре контроллера просматривать и добавлять их в NSArray:

NSArray *viewControllers = @[NewYorkViewController, ChicagoViewController, 
          LosAngelesViewController, MiamiViewController]; 

Тогда в Tableview: didSelectRowAtIndexPath: вы можете нажать на соответствующий контроллер представления:

[self.navigationController pushViewController:viewControllers[indexPath.row] animated:YES]; 
+0

, но тогда у меня нет текста в моем UITableViewController. Точка наличия строк состояла в том, что она отображала текст для таблицы – rivtracks

+0

@rivtracks - использовать массив 'viewControllers' в ** добавлении ** в массив' city'. –

+0

массив строк и массив объектов, звучит ужасно, как NSDictionary нет? Я думаю, что решение enrico лучше подходит –

0

Сначала позвольте мне начать с того, что лучшим вариантом будет иметь ваш массив имен городов, а затем создать экземпляр правильного контроллера представления в вашем методе выбора строк. Но если я не могу отговорить вас, здесь более сложный вариант:

Вместо того, чтобы хранить имя в массиве, хранить массив словарей:

NSArray *[email protected][@{@"city":@"NewYork",@"viewController":NewYorkViewController}, @{@"city":@"Chicago",@"viewController":ChicagoViewController}, @{@"city":@"LosAngeles",@"viewController":LosAngelesViewController}, @{@"city":@"Miami",@"viewController":MiamiViewController}]; 

При получении название города в вашем Tableview: cellForRowAtIndexPath: получить город вот так:

NSString *cityName = [[cities objectAtIndexPath:indexPath.row] objectForName:@"city"]; 

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

UIViewController *cityViewController = [[cities objectAtIndexPath:indexPath.row] objectForName:@"viewController"]; 
[self.navigationController pushViewController:cityViewController animated:yes]; 

Предполагая, что все контроллеры представления городов созданы, они должны работать.

+0

, вы могли бы показать и объяснить «лучший вариант», на ваш взгляд? thanks – rivtracks

+0

В какой-то момент вы создаете экземпляры контроллеров представлений. Просто не делайте этого, пока не сделаете свой выбор, и tableView: didSelectRowAtIndexPath: выполняется. Вы уже делаете то, что нужно сделать, вы просто делаете это не в том месте. –

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