iOS 深入理解UINavigationController 和 UIViewController 之间的关系
2015-12-18 14:04
501 查看
创建三个类
C++代码
BasicViewController : UIViewController
SecondViewController : UIViewController
ThirdViewController : UIViewController
然后我们在BasicViewController .m文件中push一个viewController:
SecondViewController *svc = [SecondViewController new];
[self.navigationController pushViewController:svc animated:true];
在SecondViewController.m文件中pop出viewController:
[self.navigationController popViewControllerAnimated:true]
问题就来了,
push和pop是同一个viewController,那为什么用self.navigationController 就可以知道了
其中在AppDelegate.m:
C++代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
BasicViewController *basicViewController = [BasicViewController new];//实例化内存后,_parentViewController-->nil
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:basicViewController];
// self.window.rootViewController = basicViewController.parentViewController;
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
return YES;
}
等价于
C++代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
BasicViewController *basicViewController = [BasicViewController new];//实例化内存后,_parentViewController-->nil
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:basicViewController];
self.window.rootViewController = basicViewController.parentViewController; //不可以注释上一句,因为上一句是为_parentViewController实例化
// self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
return YES;
}
分配内存如图
C++代码
BasicViewController : UIViewController
SecondViewController : UIViewController
ThirdViewController : UIViewController
然后我们在BasicViewController .m文件中push一个viewController:
SecondViewController *svc = [SecondViewController new];
[self.navigationController pushViewController:svc animated:true];
在SecondViewController.m文件中pop出viewController:
[self.navigationController popViewControllerAnimated:true]
问题就来了,
push和pop是同一个viewController,那为什么用self.navigationController 就可以知道了
其中在AppDelegate.m:
C++代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
BasicViewController *basicViewController = [BasicViewController new];//实例化内存后,_parentViewController-->nil
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:basicViewController];
// self.window.rootViewController = basicViewController.parentViewController;
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
return YES;
}
等价于
C++代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
BasicViewController *basicViewController = [BasicViewController new];//实例化内存后,_parentViewController-->nil
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:basicViewController];
self.window.rootViewController = basicViewController.parentViewController; //不可以注释上一句,因为上一句是为_parentViewController实例化
// self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
return YES;
}
分配内存如图
相关文章推荐
- UIScrollView的图片缩放(只加载一张图片的时候)
- ugui做小地图
- HDOJ 2818 Building Block
- Android Studio Experimental Gradle Plugin User Guide
- 用GUI写了一个登录验证(含时间加密)
- [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
- 307. Range Sum Query - Mutable
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
- how to query for a list<String> in jdbctemplate?--转载
- 使用driver.quit()的时候,有时会报错
- IOS UI篇—UILabel的文字顶部对齐
- uiautomator开发使用到第三方jar,出现class not found或者 BUILD FAILED的问题
- SharePoint : 使用SPQuery对象时要注意的事项
- Android 基础UI Demo小合集
- driver.close 和 driver.quit
- UGUI InputField获取输入焦点
- UITableView的自定义cell
- 28.Which two statements are true regarding constraints?
- requirejs+anjularjs+express框架
- UIAlertController的一些简单实用方法