2014-12-15 6 views
1

Основная навигация для моего приложения iOS 8 - это панель вкладок с 3 вкладками. У меня также есть экран входа в систему, который является UIViewController, у которого не должно быть вкладок внизу. Я только когда-либо обращаюсь к экрану входа в систему из обычного потока, если обнаруживаю, что пользователь либо не вошел в систему, либо выбрал выход из системы. Я не уверен, как удалить язычки с экрана, когда я показываю на экране входа в систему с помощью следующего кода:Swift Remove Tab Bar Программно

let loginView = self.storyboard?.instantiateViewControllerWithIdentifer("Login") as UIViewController 
self.presentViewController(loginView, animate: true, completion: nil) 

Я попытался установить tabBar.hidden свойство true без результата. Я также пробовал модифицировать раскадровку, чтобы установить «Нижняя панель» на «Нет» и проверил «Скрыть нижнюю панель при нажатии».

+0

Что здесь такое? Откуда вы представляете контроллер просмотра? – shim

+0

Я представляю контроллер представления из табличного представления, который находится внутри TabViewController. – shacker

ответ

1

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

Я попытался установить свойство tabBar.hidden в true без результата.

Завершение загрузки панели вкладок? Позвоните hidden=YES после viewDidLoad вашего входа в систему.

EDIT

После вызова self.presentViewController(loginView, ...), вид на UITabBarController будут удалены из UIWindow, и вид на LoginView будет вставлен подвид UIWindow в. Теперь панель вкладок невидима.

Вы можете использовать функцию «Просмотр отладки» XCode6, чтобы понять иерархию представления. Вы также можете использовать метод recursiveDescription() UIViewController.

/* UIViewExtension.h */ 
@interface UIView(MyExtension) 
- (NSString*)recursiveDescription; //This is hidden API so need the declaration. 
@end 


/* YourViewController.swift */ 
override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 

    println(self.tabBarController?.view.superview?.recursiveDescription()) 
    // Here, the view of tabBarController is subview of UIWindow. 
} 

@IBAction func testButtonPressed(sender: UIButton) { 
    self.presentViewController(viewController, animated: true) {() -> Void in 
     println(self.tabBarController?.view.superview?.recursiveDescription()) 
     println(loginView.view.superview?.superview?.recursiveDescription()) 
     //Now, TabBarController's view is not subView of UIWindow. 
    } 
} 
+0

У меня есть отдельный ViewController для экрана входа, который не подключен к TabViewController через любой сеанс в раскадровке. Когда я устанавливаю 'hidden = YES', я получаю нулевое значение. – shacker

+0

Я пробовал вашу ситуацию в своем Xcode и редактировал свой ответ. –