ModalView не отображается с tabbarcontroller - PullRequest
1 голос
/ 21 июля 2011

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

Пример -> Показать / Скрыть панель вкладок

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

вот мой код:

AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIViewController *viewController1 = [[FirstTab alloc] initWithNibName:@"FirstTab" bundle:NSBundle.mainBundle];
UIViewController *viewController2 = [[SecondTab alloc] initWithNibName:@"SecondTab" bundle:NSBundle.mainBundle];
UINavigationController *secondNavController = [[UINavigationController alloc]initWithRootViewController:viewController2];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, secondNavController, nil];

self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;

}

Моя первая вкладка (именно там я понимаю, что все это модальное представление бизнеса должно произойти)

.h

@interface FirstTab : UIViewController

@end

.m

// ОБНОВЛЕННЫЙ КОД ДЛЯ КОММЕНТАРИИ НИЖЕ

- (void)viewDidLoad
{
[super viewDidLoad];
SignIn *loginview = [[SignIn alloc] initWithNibName:@"SignIn" bundle:nil];
UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController: loginview];
self.hidesBottomBarWhenPushed = YES; 
[self presentModalViewController:controller animated:YES]; 

}

И, конечно, я отклоняю модальноепросмотр в контроллере представления SignIn, хотя я никогда не получаю, как я уже говорил.

Что я здесь не так делаю?Спасибо за помощь !!

Ответы [ 3 ]

1 голос
/ 21 июля 2011

Вы можете использовать:

[[self tabBarController] presentModalViewController:controller animated:YES];

, поскольку первая viewController1 - ваша первая вкладка, а self.navigationController может быть нулем.

В вашем подклассе контроллера пользовательского представления, называемом SignIn, вместо этого реализуйте initWithNibName:bundle:, если init.

-(id)initWithNibName:(NSString *)nibNameOrNil
              bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // init here
    }
}

Теперь, когда init / alloc вызывает либо:

SignIn *loginview = [[SignIn alloc] initWithNibName:@"SignIn" bundle:nil];

, если ваш интерфейс находится в файле NIB, или:

SignIn *loginview = [[SignIn alloc] initWithNibName:nil bundle:nil];

если нет NIB.

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

// why ?
//UINavigationController *controller = [[UINavigationController alloc]
//                                      initWithRootViewController: loginview];
//self.hidesBottomBarWhenPushed = YES; 
//[self presentModalViewController:controller animated:YES];
[self presentModalViewController:loginView animated:YES]; 
1 голос
/ 21 июля 2011

Я столкнулся с проблемами, когда модалы не любят показывать из viewDidLoad. Попробуйте добавить свой код в viewWillAppear, и он должен отобразиться.

1 голос
/ 21 июля 2011

Вы должны включить это в свой код,

yourModelController =[[Yourmodelcontroller alloc]init];

UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController: yourModelController];


self.hidesBottomBarWhenPushed = YES;
    [[self navigationController] presentModalViewController:controller animated:YES];
    [controller release];

надеюсь, это поможет вам.

...