iOS多界面设计杂谈
判断程序首次启动
- 利用NSUserDefaults,还可以判断程序的首次启动,方法是在AppDelegate.m文件中找到:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- 该方法是UIApplication的协议方法,定义在AppDelegate类中,在程序每次启动之后被调用。在该方法中定义NSUserDefaults单例,可用任意键值判断是否为首次启动,因为在首次启动时还未建立任何键值,代码如下:
NSUserDefaults *launchSettings=[NSUserDefaults standardUserDefaults]; if([launchSettings boolForKey:(@"hasLaunched")]==NO) { [launchSettings setBool:(YES) forKey:(@"hasLaunched")]; [launchSettings setBool:(NO) forKey:(@"nightShiftOpen")]; }
- 其中if语句的条件如果成立就代表是首次启动,可加入欢迎页和新手提示等内容。
深入理解UITabBarController各页面的生命周期
- UITabBarController是最常用的布局方式,要注意在启动时只有第一个页面会被加载,其他页面不会被加载。同时再次切换到每个页面的时候对应UIViewController的viewDidLoad方法不会被调用,不能把需要实时刷新的语句放入其中。不过可以利用方法:
- (void)viewWillAppear:(BOOL)animated
该方法是页面即将出现的时候被调用,可放入实时刷新的语句,例如下面的例子是简易的夜间模式的实现:
- (void)viewWillAppear:(BOOL)animated { BOOL isOpenNightShift=[_userSettings boolForKey:(@"nightShiftOpen")]; if(isOpenNightShift==YES) { self.tableView.backgroundColor=[UIColor blackColor]; self.navigationController.navigationBar.backgroundColor=[UIColor blackColor]; } else { self.tableView.backgroundColor=[UIColor whiteColor]; self.navigationController.navigationBar.backgroundColor=[UIColor whiteColor]; } }
视图控件监听方法的两种绑定方式
- 关于视图控件监听方法的绑定,在包含StoryBoard或者xib文件的程序中,可以通过纯拖拽来实现,无需编写代码:只需要选择控件并按住control按钮进行拖拽,即可添加IBAction监听器方法。
- 但是在UITableView的使用中,UITableViewCell是要求做到重用(reusable)的,包含在Cell中的控件在StoryBoard中没有对应的控件(例如Cell的accessoryView中的控件)。这时应该采用手动绑定的方式,先定义控件变量,例如在某UIViewController的@Interface中有如下定义:
@property (strong,nonatomic) UISwitch *nightShiftOpen;
- 然后在viewDidLoad方法中,为该控件申请控件并添加监听器
if(_nightShiftOpen==nil) { _nightShiftOpen=[[UISwitch alloc]init]; } [_nightShiftOpen addTarget:(self) action:(@selector(nightShiftOpenValueChanged:)) forControlEvents:(UIControlEventValueChanged)];
- 其中
nightShiftOpenValueChanged:
是绑定的方法的名称,而UIControlEventValueChanged
是事件的类型,此处类型为控件值的改变。
然后在对应的UIViewController中实现监听器方法,此处实现的是夜间模式开关的监听:
- (void)nightShiftOpenValueChanged:(id)sender { if([_nightShiftOpen isOn]==YES) { [_userSettings setBool:(YES) forKey:(@"nightShiftOpen")]; self.tableView.backgroundColor=[UIColor blackColor]; self.navigationController.navigationBar.backgroundColor=[UIColor blackColor]; } else { [_userSettings setBool:(NO) forKey:(@"nightShiftOpen")]; self.tableView.backgroundColor=[UIColor whiteColor]; self.navigationController.navigationBar.backgroundColor=[UIColor whiteColor]; } [_userSettings synchronize]; }
- 这样在该UISwitch控件值改变时,会自动调用上面的方法。
相关推荐
chensen 2020-11-14
lwnylslwnyls 2020-11-06
ATenhong 2020-10-15
yanzhelee 2020-10-13
佛系程序员J 2020-10-10
guojin0 2020-10-08
佛系程序员J 2020-10-08
bluewelkin 2020-09-16
wwzaqw 2020-09-04
zhongdaowendao 2020-09-02
favouriter 2020-08-18
奎因amp华洛 2020-08-15
一青年 2020-08-13
千锋 2020-08-10
nangongyanya 2020-08-09
dongxurr 2020-08-08
明天你好 2020-08-03
kyelu 2020-08-03
Ashes 2020-08-03