Перейти к другому представлению (UIViewController) из UIViewController

#iphone #objective-c

#iPhone #objective-c

Вопрос:

Вопрос новичка Objective C. Я пытаюсь программно изменить представление из другого представления. Но мне удается активировать кнопку tab только в tabbarcontroller.

В моем viewDidLoad у меня есть условие, что если это не выполнено, загрузите вместо этого второе представление.

Есть ли какая-нибудь добрая душа, которая может помочь новичку Objective-C? Я погуглил и поискал stackoverflow для ответа, но безуспешно.

FirstViewController.h

 @interface FirstViewController : UIViewController {

some variables

}

some @properties
  

FirstViewController.m

 #import "FirstViewController.h"

@implementation FirstViewController

- (void)viewDidLoad
{
    if(condition is met) {
        [self.tabBarController setSelectedIndex:1];
    }
}
  

В моем AppDelegate.h

 #import <UIKit/UIKit.h>

@interface otpAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate>     {

UIWindow *window;
UITabBarController *tabBarController;

}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;


@end
  

AppDelegate.m

 @implementation otpAppDelegate

@synthesize window;
@synthesize tabBarController;


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self.window addSubview:tabBarController.view];
[self.window makeKeyAndVisible];

tabBarController = [[UITabBarController alloc] init];
[tabBarController setDelegate:self];

return YES;
}
  

Редактировать!
Я нашел решение своей проблемы.

 int selectedindex = 1;
self.tabBarController.selectedIndex = selectedindex;
UIViewController *tempvc = [[self.tabBarController viewControllers] objectAtIndex:selectedindex];
[self.view removeFromSuperview];
[self.view addSubview:tempvc.view];
  

Сделал свое дело.

Комментарии:

1. Эй, это не решение… Это просто обходной путь. Код, который вы добавили для обмена представлениями, должен выполняться tabbarcontroller… но вы сделали это в своем коде…

2. Я удалил [Решаемая] из названия. Не добавляйте такие метки, потому что это уменьшит количество альтернативных решений / ответов на ваш вопрос.

Ответ №1:

Попробуйте установить индекс для tabBarController экземпляра делегата приложения, например yourAppDelegate.tabBarController

Комментарии:

1. Привет, спасибо за ваш ответ. Однако я не уверен, как это сделать 🙂 Можете объяснить немного больше и, возможно, привести пример кода?

Ответ №2:

Если вы используете TabBarController как IBOutlet, нет необходимости выделять его в делегате вашего приложения. Пожалуйста, удалите этот код из вашего метода AppDelegate (application: didFinishLaunchingWithOptions)..

  tabBarController = [[UITabBarController alloc] init];
[tabBarController setDelegate:self];