UINavigationController, UITableView и не показывать следующее представление

У меня проблема с таблицей, и я показываю другое представление, когда пользователь касается ячейки таблицы. Я использую UITabBarController для основного представления, чтобы отображать разные представления. Затем я использую UINavigationController, когда пользователь выбирает представление UITableView для отображения следующего представления из выбора ячейки таблицы.

Моя проблема заключается в следующем: когда они выбирают ячейку таблицы, ячейка выделяется, а следующее представление не появляется. Я использую ИБ. Все примеры, которые я нашел, делают это так же, как и я, за исключением того, что примеры работают!

У меня есть контроллеры, загруженные в NSMutableArray со словарем. Я также попробовал этот код, напрямую создав контроллер представления, а не используя элемент массива. Те же результаты....

Я проверил целевой контроллер (Calc1ViewController), чтобы убедиться, что с контроллером все в порядке. При прямом отображении контроллер (Calc1ViewController) отображается правильно.

Вот немного кода.....

Инициализация контроллера представления в словаре:

Calc1ViewController *calc1ViewController = [[Calc1ViewController alloc] init];
[menuList addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                     NSLocalizedString(@"SSC - page 1",@""), @"title",
                     calc1ViewController, @"viewController",
                     nil]];
[calc1ViewController release];

Я также пробовал это без использования словаря - создавая контроллер представления вместо [[menuList objectAtIndex:...]; line -- создав контроллер вида следующим образом:

Calc1ViewController *targetViewController = [[Calc1ViewController alloc] init];


// the table's selection has changed, switch to that item's UIViewController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *targetViewController = [[menuList objectAtIndex: indexPath.row] objectForKey:@"viewController"];
    [[self navigationController] pushViewController:targetViewController animated:YES];
    targetViewController = nil;
}

Контроллер навигации определяется в AppDelegate и подключается к RootViewController через IB.

Когда я выбираю строку таблицы, в отладчике отображается, что код pushViewController выполняется, но следующее представление не отображается. Вот пример:

http://thecoolestcompany.com/ssc-table-view.jpg

Любые идеи?


person iPhone Guy    schedule 31.07.2009    source источник


Ответы (3)


Наконец-то разобрался......

У меня были UINavigationController и UITabBarController на одном уровне. После перемещения контроллера навигации в качестве дочернего элемента на контроллер панели вкладок все заработало. Вы можете добавить столько навигационных контроллеров на панель вкладок, сколько захотите. В IB это немного запутанно. Вам нужно перетащить NavigationController в TabBar, чтобы он стал новым элементом панели вкладок.

person iPhone Guy    schedule 02.08.2009

Там не так много, чтобы пройти с кодом, который вы предоставили. Единственное, о чем я могу думать, не глядя на дополнительный код, это то, что, возможно, вы неправильно инициализировали свой контроллер представления (тот, что в вашем словаре) или вообще, или словарь, к которому вы обращаетесь, не является правильным...

person Daniel    schedule 31.07.2009
comment
Добавил еще немного кода - если есть дополнительный код, чтобы помочь, дайте мне знать, и я обязательно его добавлю - спасибо! - person iPhone Guy; 31.07.2009

Каково значение [self navigationController] при вызове pushViewController. Это ноль?

Каково значение targetViewController при его передаче в pushViewController. Это ноль?

person Jonathan Arbogast    schedule 31.07.2009
comment
похоже, что targetViewController не равен нулю и является правильным контроллером представления для того, который я показываю. У меня проблемы с navigationController. Первоначально он определен в App Delegate как UINavigationController *calcPageNavigation; - person iPhone Guy; 31.07.2009