2010-12-09 4 views
4

У меня есть этот код в моем табличное контроллера (и делегата):Нажатие UIViewController к NavigationController фактически не толкать вид

- (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; 
} 

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

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

@interface DetailStatus : UIViewController { 

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

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

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

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

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

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

+0

Что происходит, когда вы пытаетесь только простой UIViewController вместо DetailStatus? – ACBurk 2010-12-12 03:25:02

ответ

6

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

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

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

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

Когда вы переходите на эту вкладку, вы должны увидеть панель навигации наверху ... если вы загружаете контроллер навигации из другого 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

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

0

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

Dont вам просто нужно сделать [самостоятельно pushViewController и т.д. вместо navigationController битого

+0

Нет ...Мне нужно вызвать его из контроллера навигации, потому что это метод для UINavigationController. Когда вы выполняете [self pushViewcontroller], я закончим с непризнанным сбоем селектора – 2010-12-10 00:04:50

0

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

Просто догадаться!

+0

Ну, дело в том, что владелец файла был установлен в этот класс, и представление этого File Owner было настроено на что-то ... Теперь я ' Думаю, это может быть моя иерархия контроллера навигации, которая действует до – 2010-12-10 00:38:41

2

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

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

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

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

+0

Спасибо за ответ. Я имел в виду сделать что-то вроде Twitter для пользовательского интерфейса iPhone (http://www.wiredbob.com/blog/2009/4/20/iphone-tweetie-style-navigation-framework.html). Так что мне удастся показать что-то как экран входа в систему. Но теперь я думаю, что это может быть плохой идеей в соответствии с вашим объяснением ... Я подумаю об этом более тщательно, прежде чем продолжить проект. – 2010-12-12 03:18:43

+0

Я думаю, что ваш дизайн в порядке. Совершенно нормально использовать панель вкладок и иметь навигационный контроллер на каждой вкладке. Я буду следовать первому предложению Джастина и проверить, может ли `[self navigationController]` возможно возвращать `nil`. Это лучше всего соответствовало бы симптомам, так как вам разрешено отправлять сообщения на «nil», но ничего не происходит. – 2010-12-12 09:55:48

0

alt text

Вы должны реализовать, как и выше в закладке контроллера положить навигации контроллера в соответствии с вашими закладками и навигации контроллера вы можете поместить свою вкладку item.and также необходимо установить панели вкладок пункт перо file.then на нажав вкладку, вы получаете экран вкладки, и из-за навигационного контроллера вы можете легко перемещаться. Даже если вы можете перемещаться по экрану любого главного экрана вкладки. Это то, что вам нужно реализовать.

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

0

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

0

После проверки, что вы инициализировали первый стол и второй TableView с контроллером навигации или нет.

Добавляя к tabBar, вы добавили UINavigationController или только объект UIViewController.

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

tabBarController.viewControllers= [NSArray arrayWithObject: First_navController]; 

Вы должны добавить контроллеры вида в табло.

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

С уважением,

Сатья

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