• IOS 获得项目中info.plist文件的内容 2.沙盒的数据存储及读取 3.控制器view的高度和状态栏statusBar


    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;

  • 相关阅读:
    HTML元素 绑定href属性
    form提交不刷新,不跳转页面
    使用MVCPager做AJAX分页所需要注意的地方
    docker基础命令,常用操作
    docker基础
    redis持久化 RDB与AOF
    redis哨兵功能
    redis主从同步
    redis不重启,切换到RDB备份到AOF备份
    redis-cluster(集群)
  • 原文地址:https://www.cnblogs.com/yuqingzhude/p/4836516.html
Copyright © 2020-2023  润新知