1.获得项目中info.plist文件的内容
1> [NSBundle mainBundle].infoDictionary
2> 版本号在info.plist中的key:kCFBundleVersionKey
2.沙盒的数据存储及读取
1> 数据存储:
[[NSUserDefaults standardUserDefaults] setObject:version forKey:versionKey];
存储数据时记得同步一下 [[NSUserDefaults standardUserDefaults] synchronize]; 这两句话一般是成对存在的
2> 数据读取:
[[NSUserDefaults standardUserDefaults] objectForKey:versionKey];
(1,2)小知识点综合例子: 沙盒中存储版本号并读取版本号和应用程序里的版本号对比是否相同 来判断所要跳转的根视图控制器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; /* 二、判断用户是否第一次使用这个版本 1.将沙盒中的版本号和info.plist中的版本号进行比较 2.第一次使用:显示版本新特性界面 3.非第一次使用:显示主界面(显示状态栏) */ // 1.从info.plist字典中取出版本号 NSString *versionKey = (NSString *)kCFBundleVersionKey; NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:versionKey]; // 2.取出存在于沙盒中的版本号 NSString *saveVersion = [[NSUserDefaults standardUserDefaults] objectForKey:versionKey]; // 3.判断info.plist中的版本号和沙盒中的版本号进行比较 if ([saveVersion isEqualToString:version]) { // 版本号相同 非第一次使用:显示主界面(显示状态栏) // 显示状态栏 application.statusBarHidden = NO; self.window.rootViewController = [[MainViewController alloc]init]; } else // 版本号不同 非第一次使用:显示主界面(显示状态栏) { [[NSUserDefaults standardUserDefaults] setObject:version forKey:versionKey]; [[NSUserDefaults standardUserDefaults] synchronize]; // 同步 self.window.rootViewController = [[NewFeatureViewController alloc] init]; } [self.window makeKeyAndVisible]; return YES; }
3.控制器view的高度和状态栏statusBar的关系
创建控制器的view时,系统会检测状态栏是否显示
* 如果有状态栏,那么控制器view的高度是460(iPhone5中是548)
* 如果没有状态栏,那么控制器view的高度是480(iPhone5中是568)
ps: statusBar状态栏的高度占了20个像素点
4.[UIScreen mainScreen].applicationFrame的取值
以3.5inch为例(320x480)
1> 没有状态栏,applicationFrame的值{{0, 0}, {320, 480}}
2> 有状态栏,applicationFrame的值{{0, 20}, {320, 460}}
5.按钮的状态
UIControlStateNormal 普通(默认的状态)
UIControlStateHighlighted 高亮(用户长按的时候)
UIControlStateDisabled 失效(通过代码控制:enabled属性)
UIControlStateSelected 选中(通过代码控制:selected属性)
(5)例子 给一个按钮添加监听事件 点一下选中 再点一下选中就取消
// 1.给UIButton添加监听事件 [shareBtn addTarget:self action:@selector(shareClick:) forControlEvents: UIControlEventTouchUpInside]; // 2.设置默认状态为没有选中状态 shareBtn.selected = NO; // 3.设置监听的方法为按钮状态的反选 - (void)shareClick:(UIButton *)btn { btn.selected = !btn.selected; } // 三部曲搞定
6.错误调试技巧
1> 一个控件无法显示出来的可能原因
* 没有宽高(宽高为0)
* 位置不对
* hidden=YES
* 没有被addSubview到屏幕上
2> 一个UIScrollView无法滚动
* contentSize没有值
* 不能接收到触摸事件
3> 一个控件无法跟用户交互(无法接收事件)的可能原因
* (父控件的)userInteractionEnabled = NO;
* (父控件的)hidden = YES
* (父控件的)alpha <= 0.01
* (父控件的)背景是clearColor
7.按钮的各种状态设置
// 高亮状态下不更改图片的颜色
self.adjustsImageWhenHighlighted = NO;
// 是否选中状态
self.selected = YES;
// 是否可用状态
self.enabled = YES;