iOS编程:学习篇(九)

UITabBarController

UITabBarController对象可以保存一组视图控制器。UITabBarController对象还会在屏幕底部显示一个标签栏,标签栏会有多个标签项,分别对应UITabBarController对象所保存的每一个视图控制器。

UITabBarController *tabBarCintroller = [[UITabBarController alloc] init];
//其中hvc和rvc分别是两个viewcontroller
tabBarCintroller.viewControllers = @[hvc, rvc];

同时UITabBarController也是UIViewController的子类,也有一名为view的属性。UITabBarController对象的view指向一个包含两个子视图的UIView对象,分别是标签栏和当前选中的视图控制器的视图。

设置标签项

标签栏上的每个标签项都可以显示标题和图片,具体数据需要由视图控制器的tabBarItem属性提供。
原理:当UITabBarController对象加入一个视图控制器时,就会为标签栏增加一个标签项,并根据新加入的视图控制器的tabBarItem属性设置该标签项的标题和图片。

视图控制器的初始化方法

值得注意的是:initWithNibName: boundle:方法是UIViewController的指定初始化方法,也就是说调用init最终依旧是调用initWithNibName: boundle:,只不过这两个参数都是nil。
那么问题来了,既然是nil,会不会对我们的视图有所影响呢?
PynosisViewController在创建view属性的时候并没有用到NIB文件,但是我们向一个需要用到NIB文件的对象发送init呢?其实,即使我们调用init时,最终调用的是参数均为nil的initWithNibName: boundle:方法,但是UIViewController对象仍然会在应用程序包中查找和当前UIViewController子类同名的XIB文件。

添加本地通知(local notification)

本地通知用于向用户提示一条消息——即使应用没有运行,用户也可以收到本地通知。
应用还可以通过后台服务器实现推送通知(push notification)。

- (IBAction)addReminder:(id)sender{
    NSDate *date = self.datePicker.date;
    NSLog(@"Setting a reminder for %@", date);
    UILocalNotification *note = [[UILocalNotification alloc] init];
    note.alertBody = @"Hynostize me";
    note.fireDate = date;
}

加载和显示视图

视图延迟加载机制
为了实现延迟加载,在initWithNibName:bundle:中不应该访问view或者view的任何子视图。所以,凡事和view或view的子视图有关的初始化代码,都应该在viewDidLoad方法中实现,避免加载不需要在屏幕上显示的视图。

访问视图

在用户看到XIB文件中创建的视图之前需要对它们做一些额外的初始化工作。但是,关于视图的初始化代码不能写在视图控制器的初始化方法中——此时视图控制器并未加载NIB文件,所有指向视图的属性都是nil。

问题来了,我们应该在那些方法中访问XIB文件中的视图呢?

  1. 用于确认视图已经加载的viewDidLoad,该方法辉仔视图控制器加载完NIB文件之后被调用,此时视图控制器中所有视图属性都已经指向了正确的视图对象。
  2. viewWillAppear:,该方法会在视图控制器的view添加到应用窗口之前被调用。
    他们的区别在于:如果只需要在应用启动后设置一次视图对象,就选择viewDidLoad。如果用户每次看到视图控制器的view时都对其进行设置,就选择viewWillAppear:。
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    self.datePicker.minimumDate = [NSDate dateWithTimeIntervalSinceNow:60];
}

这里用到了viewWillAppear:就是因为每次datePicker在每次打开应用的时候都是动态更新的。
那么viewWillAppear:方法中的animated参数用于设置是否使用视图显示或消失的过渡动画。

与视图控制器及其视图进行交互

  • application:didFinishLaunchingWithOption:在该方法中设置和初始化应用窗口的根视图控制器。该方法只会在应用启动完毕后调用一次,之后如果从其他应用切换回本应用,则该方法不会再次被调用。如果关闭应用后台进程并重新启动应用,该方法才会再次被调用。
  • initWithNibName:bundle:该方法是UIViewController的指定初始化方法,创建视图控制器时,就会调用该方法。请注意,某些情况下,需要在同一个应用中创建多个相同UIViewController子类对象,每次创建一个该类的对象时,都会调用一次该类的initWithNibName:bundle:方法。
  • loadView:可以覆盖该方法,使用代码方式设置视图控制器view属性。
  • viewDidLoad可以覆盖该方法,设置使用NIB文件创建的视图对象,该方法辉仔视图控制器加载完成后被视图调用。
  • viewWillAppear:可以覆盖该方法,设置使用NIB文件创建的视图对象。该方法和viewDidAppear:会在每次视图控制器的view显示在屏幕上时被调用。相反,viewWillDisappear:和viewDidDisappear:方法会在每次视图控制器的view从屏幕上消失时被调用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值