can*_*Man 38 uinavigationcontroller ios
我已经找到了许多使用Objective-C 回弹2 UIViewControllers的UINavigationController方法,但是当我尝试将其切换到Swift时它似乎没有用.
回弹的最佳方法是UIViewController什么?任何指导将不胜感激谢谢
Aar*_*ski 123
扩展我的注释,在viewControllers数组中找到第二个最后一个视图控制器,然后使用popToViewController来避免覆盖整个视图控制器堆栈.
示例(假设导航控制器具有多个视图控制器):
func backTwo() {
let viewControllers: [UIViewController] = self.navigationController!.viewControllers as [UIViewController]
self.navigationController!.popToViewController(viewControllers[viewControllers.count - 3], animated: true)
}
Run Code Online (Sandbox Code Playgroud)
Max*_*elc 19
我写了一个UIViewController扩展(Swift 3+准备好了)
你可以像这样使用:
/// pop back n viewcontroller
func popBack(_ nb: Int) {
if let viewControllers: [UIViewController] = self.navigationController?.viewControllers {
guard viewControllers.count < nb else {
self.navigationController?.popToViewController(viewControllers[viewControllers.count - nb], animated: true)
return
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
self.popBack(3)
Run Code Online (Sandbox Code Playgroud)
奖金解雇特定的viewcontroller
/// pop back to specific viewcontroller
func popBack<T: UIViewController>(toControllerType: T.Type) {
if var viewControllers: [UIViewController] = self.navigationController?.viewControllers {
viewControllers = viewControllers.reversed()
for currentViewController in viewControllers {
if currentViewController .isKind(of: toControllerType) {
self.navigationController?.popToViewController(currentViewController, animated: true)
break
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
self.popBack(toControllerType: MyViewController.self)
Run Code Online (Sandbox Code Playgroud)
小智 11
您可以在(swift 2.0)中动态弹出多个viewcontrollers
let allViewController: [UIViewController] = self.navigationController!.viewControllers as [UIViewController];
for aviewcontroller : UIViewController in allViewController
{
if aviewcontroller .isKindOfClass(YourDestinationViewControllerName)
{
self.navigationController?.popToViewController(aviewcontroller, animated: true)
}
}
Run Code Online (Sandbox Code Playgroud)
nid*_*hin 11
user5320485在swift3中回答
let viewControllers = self.navigationController!.viewControllers as [UIViewController];
for aViewController:UIViewController in viewControllers {
if aViewController.isKind(of: AdCreateViewController.self) {
_ = self.navigationController?.popToViewController(aViewController, animated: true)
}
}
Run Code Online (Sandbox Code Playgroud)
@Maximelc 答案的 Swift 4 UINavigationController 扩展版本:
extension UINavigationController {
func popBack(_ nb: Int) {
let viewControllers: [UIViewController] = self.viewControllers
guard viewControllers.count < nb else {
self.popToViewController(viewControllers[viewControllers.count - nb], animated: true)
return
}
}
/// pop back to specific viewcontroller
func popBack<T: UIViewController>(toControllerType: T.Type) {
var viewControllers: [UIViewController] = self.viewControllers
viewControllers = viewControllers.reversed()
for currentViewController in viewControllers {
if currentViewController .isKind(of: toControllerType) {
self.popToViewController(currentViewController, animated: true)
break
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34279 次 |
| 最近记录: |