Как перейти к представлению, управляемому контроллером панели вкладок, и передать данные

У меня есть представление входа в систему, которое принимает имя пользователя и пароль и захватывает строку веб-страницы. Затем я хочу передать эту информацию в следующее представление, где она загрузит строку html. Проблема в том, что второе представление управляется контроллером панели вкладок (тот, который был сгенерирован шаблоном панели вкладок по умолчанию в xcode). Однако, когда я перехожу к нему, я теряю контроллер панели вкладок. Мой переход идет от контроллера входа в систему непосредственно ко второму представлению. Я попытался направить его на сам контроллер панели вкладок, но мне не удалось передать данные из представления входа в первое представление. Любые советы или обходные пути для этого?

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([[segue identifier] isEqualToString:@"ShowSchedule"]){
        SocialSchedulerFirstViewController *scheduleController = (SocialSchedulerFirstViewController *)segue.destinationViewController;
        NSString *webPageCode = htmlString;
        scheduleController.htmlString = webPageCode;
    }
}

person CoderNinja    schedule 07.02.2014    source источник


Ответы (2)


Удалите переход на контроллер таббара, вам нужно сделать это программно

Установите свой tabBarcontroller в раскадровке в качестве начального контроллера

Внутри AppDelegate.m

if (authenticatedUser)
{
    self.window.rootViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateInitialViewController];


}
else
{
       UIViewController* rootController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"LoginViewController"];

        UINavigationController* navigation = [[UINavigationController alloc] initWithRootViewController:rootController];
        self.window.rootViewController = navigation;
}

Внутри LoginController

- (IBAction)actionLogin:(id)sender {


AppDelegate *appDelegateTemp = [[UIApplication sharedApplication]delegate];

appDelegateTemp.window.rootViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateInitialViewController];

}
person bhavya kothari    schedule 07.02.2014

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

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([[segue identifier] isEqualToString:@"ShowSchedule"]){
        UITabBarController *tabar=(UITabBarController*)segue.destinationViewController;
        SocialSchedulerFirstViewController *scheduleController = (SocialSchedulerFirstViewController *)[tabar.viewControllers objectAtIndex:0];;
        NSString *webPageCode = htmlString;
        scheduleController.htmlString = webPageCode;
    }
}

Это будет работать, если ваш SocialSchedulerFirstViewController является первой вкладкой контроллера панели вкладок.

person Greg    schedule 07.02.2014