我对iOS开发有疑问。为什么可以编译?
__kindof UIViewController *selectedViewController;
[selectedViewController popToRootViewControllerAnimated:YES];
答案 0 :(得分:2)
使用__kindof
意味着编译器可以假定selectedViewController
的类型为UIViewController
或层次结构中具有UIViewController
的任何子类
popToRootViewController
是UINavigationController
的一种方法。由于UINavigationController
是UIViewController
的子类,因此编译器会说:
好的,我假设您知道自己在做什么,然后让您调用一个我知道来自UIViewController子类的方法。
这类似于使用演员表:
UIViewController *selectedViewController;
[(UINavigationController *)selectedViewController popToRootViewControllerAnimated:YES];
您正在告诉编译器信任您。
但是,当然,在两种情况下,如果在运行时变量实际上不是UINavigationController
,则代码将在运行时崩溃。
答案 1 :(得分:0)
UINavigationController不能弹出UIViewController控制器。
答案 2 :(得分:-1)
UINavigationController具有rootViewController属性,它可以具有多个视图控制器,因此您可以使用popToRootViewController到达第一个视图控制器。您可以将以下代码用于快速版本。
viewController.navigationController?.popToRootViewController(animated: true)