Цель C — Программный переход к контроллеру представления, не находящемуся на вкладках TabBarController

#objective-c #uitabbarcontroller

Вопрос:

У меня есть контроллер панели вкладок, который содержит 3 контроллера представлений, и в 1 из этих контроллеров представлений у меня есть кнопка для представления другого контроллера представлений, отсутствующего в контроллере панели вкладок. Функции в кнопке выполняются, но другой контроллер представления не отображается. Чтобы быть более конкретным, 3 контроллера просмотра на панели вкладок-это страница профиля, страница профиля редактирования и страница профиля всех пользователей. И на странице моего профиля у меня есть кнопка выхода, чтобы вернуться к экрану входа в систему, который не является частью панели вкладок.

Вот мой код:

 - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
    // last login
    NSString * username = [[NSUserDefaults standardUserDefaults] objectForKey:@"SessionKey"];
    Users* lastUser =[LocalStorageController loadCustomObjectWithKey:username];
    ProfilePage *lastUserProfile = [[ProfilePage alloc] initWithUser:lastUser];
    EditProfile *lastUserEdit = [[EditProfile alloc]initWithUser:lastUser];
    AllUsersProfile *lastUserViewAll = [[AllUsersProfile alloc]init];
    
    UITabBarController *tabBarController = [[UITabBarController alloc] init];

        NSArray *viewControllers = [NSArray arrayWithObjects:lastUserProfile,lastUserEdit,lastUserViewAll,nil];

        [tabBarController setViewControllers:viewControllers animated:NO];
        [tabBarController release];
        self.window.rootViewController = tabBarController;

    lastUserEdit.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Edit Profile" image:nil selectedImage:nil];
    lastUserProfile.tabBarItem =[[UITabBarItem alloc] initWithTitle:@"Home" image:nil selectedImage:nil];
    lastUserViewAll.tabBarItem =[[UITabBarItem alloc] initWithTitle:@"View Others" image:nil selectedImage:nil];

 

А вот код для выхода из системы:

 
- (void) logOut{
    [self dismissViewControllerAnimated:YES completion: nil]; //this does not show the LoginScreen view controller
  
}

 

Ответ №1:

Пожалуйста, проверьте текущий код, чтобы представить новый контроллер в контроллерах панели вкладок.

// У вас есть три UIViewController

 - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {

    ViewControllerTab1 * tabVC1 = [[ViewControllerTab1 alloc] init];
    ViewControllerTab2 * tabVC2 = [[ViewControllerTab2 alloc] init];
    ViewControllerTab3 * tabVC3 = [[ViewControllerTab3 alloc] init];

    UITabBarController *tabBarController = [[UITabBarController alloc] init];
    NSArray * viewControllers = [NSArray arrayWithObjects:tabVC1,  tabVC2,  tabVC3, nil];
    [tabBarController setViewControllers:viewControllers animated:NO];
    
    self.window.rootViewController = tabBarController;

    tabVC1.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Edit Profile" image:nil selectedImage:nil];
    tabVC2.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Home" image:nil selectedImage:nil];
    tabVC3.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"View Others" image:nil selectedImage:nil];
}
 

В ViewControllerTab1 представьте новый контроллер ViewController, который вам нужен в соответствии с вашими требованиями

 -(void)presentAnotherVC{
    NewViewController * vc = [[NewViewController alloc]init];
    [self presentViewController:vc animated:YES completion:nil];
}
 

В NewViewController отключите NewViewController, чтобы вернуться к выбранному контроллеру панели вкладок

 -(void)dsmissThisVC{
    [self dismissViewControllerAnimated:YES completion:nil];
}