У меня есть панель вкладок с элементом, который ведет к контроллеру навигации, который имеет список друзей пользователя. Однако, хотя анонимный пользователь должен иметь возможность просматривать приложение, я только хочу, чтобы пользователи входили в список пользователей, так как только тогда у них будут друзья. Я использую Parse в качестве бэкэнд, поэтому я могу проверить PFUser.currentUser()
, но я понятия не имею, как сообщить контроллеру навигации переходить к VC, который предлагает пользователю войти в систему/зарегистрироваться, если они еще не были. Заранее спасибо.Swift - Segue для определенного вида, если выполнены условия
Edit: Я реализовал предложенное решение в классе контроллера панели вкладок, и выглядит следующим образом:
override func viewDidLoad() {
super.viewDidLoad()
tabBarController?.delegate = self
}
func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
if viewController == FriendsTableViewController() {
if PFUser.currentUser() != nil {
println("there is a logged in user")
return true
} else {
let authVC:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("auth") as UIViewController
presentViewController(authVC, animated: true, completion: nil)
println("attempted to present auth vc")
return false
}
} else {
println("not friends table vc")
return true
}
}
Однако, ничего не выводится, когда я выбираю бар пункт друзей. Что мне не хватает?
Редактировать: Разрешено. Это код viewWillAppear в контроллере представления для друзей ВХ:
override func viewWillAppear(animated: Bool) {
if PFUser.currentUser() == nil {
var login = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("auth") as AuthenticationVC
self.presentViewController(login, animated: animated, completion: nil)
}
}
Вы установили 'tabBarController.delegate' в' self'? Кроме того, я бы вернул 'true' в ваш _not список друзей vc_' else', потому что вы все равно захотите переключиться на другие представления, если у вас нет других причин для возврата 'false'. – Sean
Проблема все еще существует. – Technicolor
Делегат должен быть установлен вне вызова метода. Если вы используете раскадровку, вы можете перетащить свойство 'delegate' в инспекторе подключения к вашему контроллеру представления. Если вы делаете это с помощью кода, вы можете установить делегат в свой метод 'viewDidLoad' – Sean