Выдвижение UIViewController в NavigationController фактически не выдвигает представление - PullRequest
4 голосов
/ 10 декабря 2010

У меня есть этот код в моем контроллере табличного представления (и делегате):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    DetailStatus *detailViewController = [[DetailStatus alloc] initWithNibName:@"DetailStatus" bundle:nil status:[mStatuses objectAtIndex:indexPath.row]];
    [[self navigationController] pushViewController:detailViewController animated:YES];
    [detailViewController release];     
    [self.tableView deselectRowAtIndexPath:indexPath animated:NO];
    NSLog(@"exiting didselectrow");

}

И в моем классе DetailStatus:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil status:(NSDictionary *)pStatus {
    NSLog(@"I am being called %d", [pStatus objectForKey:@"id"]);
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {
        // some stuff
    }
    return self;
}

Самое смешное, что мой DetailStatus на самом делебудучи инициализированным, в окне консоли он даже выводит "I am being called 000001", но странным образом представление не переносится в представление таблицы ...

Я проверил имя пера, и все в порядке.Я проверил заголовочный файл DetailStatus, он выглядит нормально (вот так):

@interface DetailStatus : UIViewController {

Так кто-нибудь знает, почему представление не переносится в окно, даже если я его инициализировал и выдвинул?

ОБНОВЛЕНИЕ: я попытался записать некоторые сообщения отладки в viewDidLoad в DetailStatus, и кажется, что представление не загружено, хотя класс был создан ... Интересно, почему.

ОБНОВЛЕНИЕ2:такое ощущение, что это может быть моей организацией контроллера навигации, это неправильно .. У меня есть следующее:

Login page -> customtabbar -> First table view -> DetailStatus
                           -> Second table view -> DetailStatus

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

Спасибо всем за ответы!Я скоро выдаю награду, я позволю другим людям голосовать первыми до истечения срока награды.

Ответы [ 7 ]

6 голосов
/ 13 декабря 2010

После просмотра сценарий кажется таким же, как у меня. С чем я столкнулся впервые при работе с Tab + Navigation.

Я уверен, что есть какая-то проблема с вашим Tab + Navigation basedприложение.Хотя он показывает, что вкладка, а также навигация не способны перемещаться по основному потоку. И очень трудно решить вашу проблему с таким меньшим количеством кода.

Вместо этого у меня было альтернативное решение для этого:

Если у вас есть панель вкладок в XIB, самый простой способ приблизиться к этому - перетащить объект UINavigationController изОкно библиотеки (выглядит как кнопка левой навигационной панели на золотом фоне) в древовидном представлении для панели вкладок (только текстовое представление, а не графический интерфейс).Поместите его под панель вкладок, затем перетащите существующий контроллер представления под контроллер панели вкладок, а не под панель вкладок.

Когда вы перейдете к этой вкладке, вы должны увидеть панель навигации в верхней части.... если вы загружаете контроллер навигации из другой xib, вы измените навигационную панель в панели вкладок xib.

, иначе, ниже вы можете выбрать лучший URL для того же:

http://books.google.co.in/books?id=2yYlm_2ktFYC&pg=PA179&lpg=PA179&dq=navigation+with+the+tab+based+application+iphoneSDK&source=bl&ots=nf2YYjX5Am&sig=COpHj9wOtsDChQBglpsljSTsElw&hl=en&ei=3ZoFTeGSOI_tsgbc_Iz6CQ&sa=X&oi=book_result&ct=result&resnum=6&ved=0CDAQ6AEwBQ#v=onepage&q&f=false

http://www.youtube.com/watch?v=LBnPfAtswgw

Надеюсь, это наверняка решит вашу проблему.

2 голосов
/ 12 декабря 2010

Если UINavigationController не является непосредственным родителем вашего контроллера представления таблицы, [self navigationController] вернет nil.

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

UIViewController *parentViewController = self.parentViewController;
[parentViewController.navigationController
    pushViewController:detailViewController
    animated:YES
];

PS После того, как толчок работает правильно, вам не нужно отменять выбор строки с постукиванием, поскольку UITableViewController делает это автоматически, когда вид снова появляется.

0 голосов
/ 18 декабря 2010

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

При добавлении в tabBar вы добавили UINavigationController или только объект UIViewController.

PM_FirstNavigationController *First_navController = [[PM_FirstNavigationController alloc] initWithRootViewController:FirstTableViewController];

tabBarController.viewControllers= [NSArray arrayWithObject: First_navController];

Вы должны добавить контроллеры представления к TabBar, как это.

Затем, при вызове [self navigationController], он выдаст объект контроллера навигации.

С уважением,

Satya

0 голосов
/ 17 декабря 2010

Ваш tableViewController непосредственно передан в контроллер навигации или есть другой viewController между ними?Проверьте значение [self navigationController] по сравнению со значением вашего navigationController (из того места, где вы его фактически создали)

0 голосов
/ 15 декабря 2010

alt text

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

Это определенно поможет вам, но вам нужна логическая реализация.

0 голосов
/ 10 декабря 2010

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

Просто предположение!

0 голосов
/ 10 декабря 2010

Я не видел выставления статуса в конце инициализации представления. Думаю, это то, что вы добавили.

Разве вам не нужно делать [self pushViewController и т. Д. Вместо бита navigationController

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