#ios #swift #xcode #uinavigationbar #segue
#iOS #swift #xcode #uinavigationbar #segue
Вопрос:
Я хочу создать приложение, которое позволяет пользователю нажимать на кнопку V1 на панели навигации. Это приведет к переходу к версии V2, где они могут нажать другую кнопку на панели навигации в версии V2, и это вернет их к версии V1, в которой внизу находится контроллер панели вкладок. Мне не нужна панель вкладок в версии V2, и я не хочу, чтобы V2 был элементом панели вкладок. Когда я пытаюсь это сделать, панель вкладок исчезает на V1, когда я возвращаюсь к V1 из V2.
КОНТРОЛЛЕР ПАНЕЛИ ВКЛАДОК -> ЭЛЕМЕНТ ПАНЕЛИ ВКЛАДОК (V1) -> V2 (через элемент кнопки панели навигации на V1) -> вернуться к V1 (через элемент кнопки панели навигации на V2)
Я добавил [self.navigationController, popViewControllerAnimated:YES];
в свою функцию кнопки, но она выдает ожидаемое выражение с ошибкой в литерале контейнера.
Кроме этого кода, у меня пока нет другого кода в моем приложении.
Я использую Xcode 8.0 и Swift 3.0
Комментарии:
1. вы упомянули, что используете Swift 3.0, но добавленная вами функция находится в Obj-c?
Ответ №1:
Сначала создайте подкласс UITabBarController
, затем добавьте свойства в AppDelegate
var navController: UINavigationController?
var tabController: MyTabController?
Если вы хотите показать контроллер панели вкладок при запуске приложения, введите этот код в AppDelegate
didFinishLaunchingWithOptions
self.window = UIWindow(frame: UIScreen.main.bounds)
let myStoryboard = UIStoryboard(name: "Main", bundle: nil) as UIStoryboard
self.tabController = myStoryboard.instantiateViewController(withIdentifier: "MyTabController") as? MyTabController
//self.navController = UINavigationController(rootViewController: self.tabController!)
//self.window?.rootViewController = self.navController
self.window?.rootViewController = self.tabController
self.window?.makeKeyAndVisible()
return true
Если вы хотите перейти на панель вкладок после входа в систему или что-то еще, добавьте свойство к этому контроллеру
var appDelegate: AppDelegate!
в viewDidLoad
appDelegate = UIApplication.shared.delegate as? AppDelegate
И метод должен выглядеть
func logIntoApp() {
appDelegate.tabController = self.storyboard?.instantiateViewController(withIdentifier: "MyTabController") as? MyTabController
appDelegate.window?.rootViewController = appDelegate.tabController
}
Затем в вашем контроллере представления элемента вкладки создайте свойство AppDelegate
и назначьте делегат, как указано выше.
И методы должны быть такими :
@IBAction func showWithTab(_sender: AnyObject) {
let DefaultVC = self.storyboard?.instantiateViewController(withIdentifier: "DefaultViewController") as! DefaultViewController
self.navigationController?.pushViewController(DefaultVC, animated: true)
}
@IBAction func showWithoutTab(_sender: AnyObject) {
let DefaultVC = self.storyboard?.instantiateViewController(withIdentifier: "DefaultViewController") as! DefaultViewController
// You can create your own animation
UIView.transition(from: (appDelegate.tabController?.view)!, to: (appDelegate.navController?.view)!, duration: 0.3, options: UIViewAnimationOptions.curveEaseIn) { (finished) in
self.appDelegate.window?.rootViewController = self.appDelegate.navController
}
// OR you can use like this way
UIView.transition(from: self.view, to: DefaultVC.view, duration: 0.3, options: UIViewAnimationOptions.curveEaseIn) { (finished) in
self.appDelegate.window?.rootViewController = self.appDelegate.navController
}
}
Ответ №2:
Почему бы не использовать простую панель вкладок? Что-то вроде этого:
и в VC1 :
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
myTab.removeFromSuperview()
}
Комментарии:
1. Когда я возвращаюсь к представлению с помощью панели вкладок, панель вкладок исчезла.
2. Когда я устанавливаю переход на VC2 с помощью контроллера навигации и переход от VC2 обратно к VC1 с помощью push-перехода в контроллере навигации, элемент кнопки панели, который я добавил на панель навигации на VC2, исчез. Извините, если мой вопрос не имеет смысла, но то, что я хочу сделать, это связать два VC с панелью вкладок. Затем на одном из VC я хочу иметь элемент кнопки панели на панели навигации, который позволяет перейти к другому VC, в котором не реализована панель вкладок. На этом VC у меня есть еще один элемент кнопки панели на панели навигации, который позволяет мне вернуться к моему VC с помощью панели вкладок. Спасибо.
Ответ №3:
Я решил свою проблему после нескольких дней попыток найти ответ. Вам нужно добавить это в любой контроллер представления.
@IBAction func unwindToViewController (sender: UIStoryboardSegue){
}
Затем вы можете добавить элемент кнопки перехода от панели к значку выхода на контроллере представления.