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

简介: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 = [nib instantiateWithOwner:niloptions:nil];

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


14、项目思路

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


________________________________________________________________________________


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

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

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

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

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

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

app.name =@"Jack”;

NSString *name = app.name;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值