Dog*_*fee 5 uitabbarcontroller uinavigationcontroller viewwillappear ios swift
我无法找到一种方法来区分从导航控制器堆栈弹出和从 UITabBarController 进入视图控制器。
我只想在视图从 TabBar 呈现时调用 ViewWillAppear 中的方法,而不是在有人按下导航控制器时。
如果我没有使用 TabBarController,我可以很容易地使用 viewDidLoad 在功能上获得它。
我试过了,
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
println("View Will Appear")
if isBeingPresented() {
println("BP")
}
if isMovingFromParentViewController() {
println("from")
}
if isMovingToParentViewController() {
println("to")
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我按下 Tab 按钮或按下后退按钮时没有区别。
只有“视图将出现”被调用。
使用 iOS 8.4 / Swift
小智 5
没有办法确定。所以我想最简单的方法是添加一些变量,在弹出回视图控制器并检查 viewWillAppear 中的状态之前,您必须更改这些变量。
class YourViewController: UIViewController {
var poppingBack = false
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if !poppingBack {
// your logic
}
else {
poppingBack = false // reset it for next time
}
}
}
// somewhere else in code, suppose yourVC is YourViewController
yourVC.poppingBack = true
self.navigationController.popToViewController(yourVC, animated: true)
Run Code Online (Sandbox Code Playgroud)
您还可以尝试实现UINavigationControllerDelegate的- navigationController:willShowViewController:animated:方法并检查在从选项卡栏显示视图控制器时是否会调用它。
听起来很好用UITabBarControllerDelegate。
首先,Bool在 ViewController 上添加一个属性comingFromTab:
class MyViewController: UIViewController {
var comingFromTab = false
// ...
}
Run Code Online (Sandbox Code Playgroud)
将您设置UITabBarControllerDelegate为您想要的任何类并实现该方法shouldSelectViewController。您可能还想继承 UITabBarController 并将它们放在那里。
func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
if let myViewController = viewController as? MyViewController {
myViewController.comingFromTab = true
}
Run Code Online (Sandbox Code Playgroud)
如果您的选项卡的初始视图控制器是 a UINavigationController,您将必须解开它并访问它的第一个视图控制器:
if let navController = viewController as? UINavigationController {
if let myViewController = navController.viewControllers[0] as? MyViewController {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
viewWillAppear最后,在视图控制器中添加您需要的任何功能:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
// ...
if comingFromTab {
// Do whatever you need to do here if coming from the tab selection
comingFromTab = false
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2939 次 |
| 最近记录: |