利用addChildViewController管理子视图控制器<2>
来源:互联网 发布:个性签名 知乎 编辑:程序博客网 时间:2024/06/05 19:59
了解addChildViewController
之后,我们就要开始Coding学习该知识点了。
但是奇怪的是,我按照网上的博客教程Coding,发现老是出问题,在这里贴下代码:
#import "ViewController.h"#import "SSone.h"#import "SStwo.h"@interface ViewController ()@property(nonatomic,strong)SStwo* two;@property(nonatomic,strong)SSone* one;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; NSArray* arr=[NSArray arrayWithObjects:@"联系人",@"QQ通话", nil]; UISegmentedControl* seg=[[UISegmentedControl alloc] initWithItems:arr]; seg.selectedSegmentIndex=0; [seg addTarget:self action:@selector(selectedValueChange:) forControlEvents:UIControlEventValueChanged]; self.navigationItem.titleView=seg; self.one=[[SSone alloc] init]; [self addChildViewController:self.one]; [self.view addSubview:self.one.view]; self.two=[[SStwo alloc] init]; [self addChildViewController:self.two];}-(void)selectedValueChange:(id)sender{ UISegmentedControl* seg=(UISegmentedControl*)sender; if (seg.selectedSegmentIndex==0) { }else if (seg.selectedSegmentIndex==1){ }}@end
如图,只要在代码中使用到所创建控制器的view
属性,就会使应用崩溃。
在这里提到,以上代码中父控制器控制的字控制器都是在父控制器中创建的,不知道是不是这个原因呢?
在网上找了好长时间,也没能找到问题的答案。我换种思路,便完成了效果:
核心:将子控制器作为父控制器的属性传入,感觉有点像UITabBarController
管理子控制器一样。不说废话,贴代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window=[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; SSone* one=[[SSone alloc] init]; SStwo* two=[[SStwo alloc] init]; ViewController* contrl=[[ViewController alloc] init]; contrl.controllers=@[one,two]; self.window.rootViewController=[[UINavigationController alloc] initWithRootViewController:contrl]; [self.window makeKeyAndVisible]; return YES;}
#import <UIKit/UIKit.h>@interface ViewController : UIViewController@property(nonatomic,strong)NSArray* controllers;@end
#import "ViewController.h"@interface ViewController ()@property(nonatomic,weak)UISegmentedControl* seg;@property(nonatomic,assign)NSInteger current;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; UISegmentedControl* seg=[[UISegmentedControl alloc] initWithItems:@[@"one",@"two"]]; self.seg=seg; self.navigationItem.titleView=self.seg; [self.seg addTarget:self action:@selector(valueChanged:) forControlEvents:UIControlEventValueChanged]; NSInteger count=self.controllers.count; for (int i=0; i<count; i++) { UIViewController* contrl=self.controllers[i]; [self addChildViewController:contrl]; contrl.view.frame=self.view.frame; } [self.view addSubview:((UIViewController*)(self.controllers[0])).view]; self.current=0; self.seg.selectedSegmentIndex=0;}-(void)valueChanged:(id)sender{ NSLog(@"valueChanged"); UISegmentedControl* seg=(UISegmentedControl*)sender; NSInteger select=seg.selectedSegmentIndex; [self transitionFromViewController:((UIViewController*)(self.controllers[self.current])) toViewController:((UIViewController*)(self.controllers[select])) duration:1 options:UIViewAnimationOptionTransitionNone animations:^{ } completion:^(BOOL finished) { if (finished) { self.current=select; } }];}@end
0 0
- 利用addChildViewController管理子视图控制器<2>
- 利用addChildViewController管理子视图控制器<1>
- addchildviewcontroller管理视图
- 浅谈UIViewController 使用-addChildViewController自定义视图控制器
- iOS开发之使用addChildViewController:给控制器添加子控制器
- 关于iOS父(容器)视图控制器管理子视图控制器的根视图的思考总结
- 切换子视图控制器
- 管理视图控制器方法
- 视图控制器管理
- - addChildViewController控制器切换
- 控制器的 addChildViewController 方法
- iOS添加子视图控制器
- 视图控制器的视图的内存管理
- UIScrollView添加子控制器addChildViewController是从xib加载的frame错乱问题
- UIView管理子视图
- 17.3、UINavigaionController(如何管理视图控制器2)-OC+UI
- 关于控制器的子视图加载
- iOS开发移除子视图控制器
- 数据库连接池DBPool分析(四):mysql连接池 mysql_connection_pool
- linux grep命令详解
- 基于MSP430G2系列实现的步进电机控制
- PAT1004. Counting Leaves bfs
- mysql命令行
- 利用addChildViewController管理子视图控制器<2>
- 堆,优先队列
- android studio gradle 签名
- 计算一个数的二进制位中1的个数的方法总结
- Android中关于颜色的使用
- java学习笔记--类与接口
- 数据库连接池DBPool分析(五):Makefile
- WAMP Server多站点出现You don t have permission to access / on this server错误
- #SC2440虚拟地址到物理地址的转换