2013-12-04 4 views
0

Я разработчик iPhone для начинающих, поэтому прошу прощения, если здесь отсутствует информация. Я создал раскадровку, у которой есть начальный контроллер представления (для входа в приложение), и если я обнаруживаю, что уже зарегистрирован пользователь (у меня есть токен API для уже сохраненного пользователя), тогда я загружу контроллер навигации, который установлен контроллер корневого представления, который является контроллером табличного представления. Внутри контроллера табличного представления у меня есть элемент навигации, который содержит элементы кнопки слева и справа. Я добавил еще один контроллер представления с меткой на, затем я ctrl перетащил из правой кнопки панели навигации на простой контроллер просмотра, чтобы создать сегмент. Этот segue - тот, который не работает, когда я создаю и запускаю приложение. Я также попытался создать IBAction и подключить его к элементу правой кнопки панели и NSLog «Hello world», но это не работает. Вот как я инициализирую раскадровку:uinavigationcontroller bar button item не отвечает

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    // Instantiate the UIStoryBoard 
    UIStoryboard *initiialStoryBoard = [UIStoryboard storyboardWithName:@"iPhoneStoryboard" bundle:nil]; 

    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 

    // Set the first view controller of the storyboard as the root controller. 
    User *user = [[User alloc] init]; 

    if ([user token] == nil) { 
     [self.window setRootViewController: [initiialStoryBoard instantiateInitialViewController]]; 
    } else { 
     UINavigationController *feedNavigationController = [initiialStoryBoard instantiateViewControllerWithIdentifier:@"feedNavigationController"]; 
     [self.window setRootViewController:feedNavigationController]; 
    } 

    [self.window makeKeyAndVisible]; 

} 

Может кто-нибудь предложить, что я могу делать неправильно?

ответ

0

Прежде всего, удалите весь свой код в рамках метода application:didFinishLaunchingWithOptions: и просто return YES;.

Создайте свою раскадровку, как на изображении ниже.

  1. Использовать UINavigationController в качестве точки входа.

  2. Установите контроллер представления аутентификации как rootViewController в UINavigationController

  3. Используйте другой SEGUE из контроллера вида аутентификации к контроллеру вида корма и дать ему идентификатор SEGUE segueFeed

Controllers and Segues in Storyboard

После этого добавьте следующий код в контроллер проверки подлинности:

- (void) awakeFromNib 
{ 
    // Set the first view controller of the storyboard as the root controller. 
    User *user = [[User alloc] init]; 

    if ([user token] == nil) 
    { 
     // do nothing because the correct view controller will be shown 
    } 
    else 
    { 
     // show the feed view controller 
     [self performSegueWithIdentifier:@"segueFeed" sender:nil]; 
    } 
} 

Теперь контроллер просмотра аутентификации будет отображаться автоматически, если не указан токен, и в противном случае контроллер отображения каналов будет показан немедленно. На этом этапе вы можете добавить свои собственные навигационные элементы (например, Action 1 и Action 2) и подключить их к другим контроллерам представлений через segues.

+0

Отлично! Спасибо огромное! – user3067870

+0

Есть еще проблема, когда я вызываю executeSegueWithIdentifier из моего метода входа (который вызывается после входа пользователя в систему и входит в систему) это работает, однако, когда я вызываю executeSegueWithIdentifier из awakeFromNib, элементы панели не отвечают? – user3067870

+0

Вы устанавливаете элементы панели бара программно или указали их в раскадровке? Я попробовал это с раскадрой и связал их с методами действий, и он отлично работает. – anka

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