iOS开发UI篇 -- 0326应用管理APP

来源:互联网 发布:falcon猎鹰手表知乎 编辑:程序博客网 时间:2024/04/28 08:56
简介:iOS的一些基础知识,还有应用管理App的封装版

学习完“下载app” 和 “疯狂猜图“ 这两个应用,相当于自学摸索半年

1、xcode项目结构

    Images.xcassets:用于存放图片资源
    Supporting Files:除了源代码之外的资源文件的存放路径
 

3、显示User中资源库的方法

开始使用mac系统进行iOS开发时,会遇到找不到模拟器所在文件夹。那是因为Library被隐藏了,只要在终端输入下面命令就可以实现显示和隐藏了:
1. 打开终端
2. 显示文件夹:chflags nohidden ~/Library  
    隐藏文件夹:chflags hidden ~/Library  (默认是隐藏的)
这样就可以找到资源库文件夹了


4、 修改了系统自带头文件后,Xcode会报错

解决方案:删掉下面文件夹的缓存即可(aplle是电脑的用户名)
/Users/aplle/资源库/Developer/Xcode/DerivedData
或者
/Users/aplle/Library/Developer/Xcode/DerivedData

当然我们也可以直接覆盖原来的文档。Xcode自带头文件的路径:
/Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/System/Library/Frameworks

5、xcode安装插件的方法

直接打开插件,run一下,退出xcode,run again ,Okay!
插件介绍

6、定义属性

// 控件使用weak
@property (nonatomic, weak) UIButton *btn;

// 字符串类型使用copy
@property (nonatomic, copy) NSString *str;

// 其他数据类型(NSArray。。。)使用strong
@property (nonatomic, strong) NSArray *apps;

// 基本数据类型assign
@property (nonatomic, assign) NSArray *apps;


7、自定义构造方法(alloc init.....)都是以(instancetype)开头,构造方法都是返回自定义类型

    构造方法需要写if(self = [super init])


8、字典转模型

字典转模型的过程最好封装在模型内部

模型应该提供一个可以传入字典参数的构造方法
- (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)xxxWithDict:(NSDictionary *)dict;


9、instancetype

instancetype在类型表示上,跟id一样,可以表示任何对象类型
instancetype只能用在返回值类型上,不能像id一样用在参数类型上  
instancetype比id多一个好处:编译器会检测instancetype的真实类型

#import "MJApp.h"@implementation MJApp- (instancetype)initWithDict:(NSDictionary *)dict{    if (self = [super init]) {        self.name = dict[@"name"];        self.icon = dict[@"icon"];    }    return self;}/** *  这里使用self,self表示谁调用方法代表谁。如果是BJApp的子类调用这个方法,则代表子类 * *  @param dict <#dict description#> * *  @return 该对象 */+ (instancetype)appWithDict:(NSDictionary *)dict{    return [[self alloc] initWithDict:dict];}@end
 

 

10、封装项目

        
//        //3. 添加view数据 使用xib
//        BJApp *app = self.apps[index];
//        UIImageView *iconView = appView.subviews[0];
//        iconView.image = [UIImage imageNamed:app.icon];
//        
//        UILabel *nameLab = appView.subviews[2];
//        nameLab.text = app.name;
 我们已经使用xib对代码做了简化,但是数据还是暴漏在外面,
 VC对于View得内部结构知道的一清二楚,我们需要对数据进行封装

//        //3. 添加view数据 自定义BJAppView对数据进行封装
//        BJApp *app = self.apps[index];
//        
//        appView.iconView.image = [UIImage imageNamed:app.icon];
//        
//        appView.nameLab.text = app.name;
        
        //3. 添加view数据 自定义BJAppView对数据进行进一步封装,在setApp方法中设置数据
        BJApp *app = self.apps[index];
        appView.app = app;

11、MVC

控制器负责加载模型数据,然后将数据给View

12、view的封装

如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心
外界可以传入对应的模型数据给view,view拿到模型数据后给内部的子控件设置对应的数据
#import <UIKit/UIKit.h>@class MJApp;/** *  使用xib的时候,需要将他的继承类改称BJAppView,然后在BJAppView中进行拖线 */@interface MJAppView : UIView/** *  模型数据 */@property (nonatomic, strong) MJApp *app;+ (instancetype)appView;/** *  通过模型数据来创建一个view */+ (instancetype)appViewWithApp:(MJApp *)app;@end

// 重写模型的set方法,在set方法中将模型数据传递给View- (void)setApp:(MJApp *)app{    _app = app;        // 1.设置图标    self.iconView.image = [UIImage imageNamed:app.icon];        // 2.设置名称    self.nameLabel.text = app.name;}


13、加载xib的方法

Xib文件可以用来描述某一块局部的UI界面
Xib文件的加载
Ø方法1

NSArray *objs = [[NSBundlemainBundle]loadNibNamed:@"MJAppView"owner:niloptions:nil];

UIButton *btn = objs[1];

这个方法会创建xib中的所有对象,并且将对象按顺序放到objs数组中

(如果xib如右图所示,那么objs数组中依次会有3个对象:1UIView1UIButton1UISwitch

Ø方法2

bundle参数可以为nil,默认就是mainbundle

UINib *nib = [UINibnibWithNibName:@"MJAppView"bundle:[NSBundlemainBundle]];

NSArray *objs = [nibinstantiateWithOwner:niloptions:nil];

在开发阶段,面向开发者的是xib文件;当把应用装到手机上时,xib文件就会转为nib文件


14、项目思路

    加载数据,设置界面,封装数据


________________________________________________________________________________


该App需要掌握一下几点:
UIView的常见属性和方法
九宫格计算方法
字典转模型
Xib的使用
自定义viewview的封装)
简单的MVC

————————————————————————————————————————————————————————————————————

用模型取代字典的好处
使用字典的坏处
Ø一般情况下,设置数据和取出数据都使用“字符串类型的key”,编写这些key时,编译器不会有任何友善提示,需要手敲

dict[@"name"] =@"Jack";

NSString *name = dict[@"name"];

Ø手敲字符串keykey容易写错
ØKey如果写错了,编译器不会有任何警告和报错,造成设错数据或者取错数据
使用模型的好处
Ø所谓模型,其实就是数据模型,专门用来存放数据的对象用它来表示数据会更加专业
Ø模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性
Ø使用模型访问属性时,编译器会提供一系列的提示,提高编码效率

app.name =@"Jack”;

NSString *name = app.name;



0 0
原创粉丝点击