您的位置:首页 > 移动开发 > IOS开发

iOS编程:学习篇(九)

2015-08-11 23:04 344 查看

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文件中的视图呢?

用于确认视图已经加载的viewDidLoad,该方法辉仔视图控制器加载完NIB文件之后被调用,此时视图控制器中所有视图属性都已经指向了正确的视图对象。

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从屏幕上消失时被调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 编程