#1. UITabBarController简单使用
- 初始化
UITabBarController
- 设置UIWindow的
rootViewController
为UITabBarController
- 根据具体情况, 通过addChildViewController方法添加对应个数的子控制器
UITabBarController添加控制器的方式有2种
:
1 2 3 4 5
| - (void)addChildViewController:(UIViewController *)childController; @property(nonatomic,copy) NSArray *viewControllers;
|
##1.1. UITabBarButton中UITabBarItem的属性
UITabBarController的高度为49
1 2 3 4 5 6 7 8 9
| @property(nonatomic,copy) NSString *title; @property(nonatomic,retain) UIImage *selectedImage; @property(nonatomic,copy) NSString *badgeValue; self.tabBarItem.badageValue = @"10"; @property(nonatomic,retain) UIImage *image;
|
当在某个界面不想显示TabBar工具条时, 在控制器属性中设置> hide bottom bar (隐藏底部的工具栏)
##1.2. 主流UI框架
#2. 控制器声明周期
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| //view加载完毕调用 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. NSLog(@"didload"); } //view即将显示到window上 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; NSLog(@"willapper"); } //view显示完毕(已经实现到窗口) -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; NSLog(@"didappear"); } //view即将从window上移除(即将看不见) - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; NSLog(@"willids"); } //view从window上完全移除 - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; NSLog(@"diddisappear"); }
|
#3. Modal
show之外, 另一种控制器的切换方式Modal
- 从底向上弹出, 并且将所覆盖的控制器弹开(暂时, 根控制器始终不变)
- 控制器向下离开时, 会将弹开的控制器放回
通过会在Modal外包装一层导航控制器
界面之间联系紧密一般用Show, 联系不紧密用Modal
##3.1. Modal的显示与销毁
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| - (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion - (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion; - (IBAction)jump { TwoViewController *two = [[TwoViewController alloc] init]; UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:two]; [self presentViewController:nav animated:YES completion:^{ NSLog(@"展示动画完毕"); }]; } - (void)viewDidLoad { [super viewDidLoad]; self.title = @"第二个控制器"; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"取消" style:UIBarButtonItemStyleDone target:self action:@selector(cancel)]; }; - (IBAction)cancel { [self dismissViewControllerAnimated:YES completion:^{ NSLog(@"关闭控制器, 自我销毁"); }]; }
|
##3.2. Modal的数据传递
同样分为两种形式, 数据的顺传和逆传 :
- 数据传递顺传(导航控制器Segue使用这个类似)
- 数据逆传使用
代理
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { NSLog(@"%@", segue.destinationViewController); UINavigationController *nav = segue.destinationViewController; NSLog(@"%@", nav.topViewController); TwoViewController *two = (TwoViewController *)nav.topViewController; two.name = @"我这条数据将会传送给下一个控制器"; } - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"%@", self.name); }
|
#4. strong和weak
strong
修饰称为强指针/强引用(默认情况下, 任何指针都是强指针
)
weak
修饰弱指针/弱引用(使用__weak修饰的指针
)
ARC 判断准则: 只要没有任何强指针指向对象, 对象就被销毁
写一个@proerty 会自动生成一个_变量
@property属性的用法
:
- weak(assign): 代理/UI控件
- strong(retain): 其他对象(除了代理/UI控件/字符串以外的对象)
- copy: 字符串
- assign: 非对象类型(基本数据类型int/float/BOOL/枚举/结构体)