有几个界面就建几个文件夹
每一个文件夹中都有三个文件夹,(models,Controllers,views)
建立一个common 和一个Base文件夹(先建文件夹,能够直接拉进去)
common的目的是建立第三方框架
Base是其余基础(Baseviewcontroller 和BasenavigationController,BaseTabBarController)
建立PCH(预编译文件)文件(目的是在整个文件编译以前导入头文件,避免重复导入)
导入预编译的文件
1Base文头文件
宏定义
2#define 新名 旧名
3common文件
common文件有第三方的头文件(common的类型是 Header File文件)
//建立窗口
//建立标签控制器
设置为窗口的足视图控制器
设置标签控制器的控制器数组
for ( in){ }//遍历数组????
初始化控制器数组(NSClassFromString(类名),控制器的初始化[NSClassFromString(类名) alloc] init],这个控制器初始化的值用父类来接收)
设置 控制器的TabBarItem.title
TabBarItem.image
初始化导航控制器的数组设置根视图为上面初始化的控制器
二
//在每一个视图控制器的init方法中加入每一个视图控制器的标题
控制器.title = @“标题”;(注若是不设置title的话,默认设置的是控制器.TabBarItem.title )
//NavigationBar的背景颜色和字体
在BaseNavigationController里进行设置
self.navigationBar.backgroundColor//这样不是咱们想要的
//定制一个类的外貌直接做用于父类??
推荐使用
//定制系统状态栏风格??(若是隐藏了导航栏的话,要重写这个方法)
//主页面
隐藏导航控制器
新建一个自定义导航控制器的视图
新建一个自定义的导航控制器器的背景图
在导航控制器中放控件
左侧安钮
button的文字的偏移属性
button的图片的偏移属性
记住当一个视图控制器有导航控制器 和标签控制器的时候,当这个视图控制器pushViewController的时候push到的控制器页拥有了标签控制器 和 导航控制器
//若是类似的文件中代码重复多的话,咱们能够写这几个类似文件的父类
//在视图控制器中
这3中方法的前后顺序
-(id)init
-(void)loadView
-(void)ViewDidLoad(在这时候这个控制器的View才能显示出来,才能在这个控制器的View上加其它的视图)
NavgationBar 自带一个边缘手势(就是咱们滑动的时候能够返回到上一个界面(但咱们把Navgationbar隐藏的时候,这个边缘手势也就没有了))
通常建立手势的时候,咱们通常用swipe的清扫手势
- (void)swipeAction:(UISwipeGestureRecognizer *)swipe {
switch (swipe.direction) {
case UISwipeGestureRecognizerDirectionRight:
{
CGPoint point = [swipe locationInView:self.view];//这个是判断这个手势的点在这个控制器的View里面的位置
if (point.x < 20) {
[self.navigationController popToRootViewControllerAnimated:YES];
}
}//记住,当Case里面使用的是函数的时候能够不用大括号,可是当调用方法的时候必须使用大括号
break;
default:
break;
}
}
//当用代码写的时候一定用
-(id)initWithFram:(CGRect)fram{
}
//当用xib进行加载的时候
—(void)awakFromNib{
}
//怎么才能走到这个类里面,必须复写init方法
//表视图
(两个必须实现的方法)datasource
//1返回单元格的个数
//2每一个单元个的样子{
//设置一个标识符
咱们的单元格首先要到tableView(表视图)复用池里面去取,根据就是标志符
static NSString *identfier = @"HomeCell";
HomeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identfier];
//判断复用池里有没有带有标志符的cell,
若是没有的话咱们就去建立
if (!cell) {
cell = [UITableview alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:
identifier];
}
//delegate
//行高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 150;
}
/声明代理的时候必须用assign
@property (nonatomic, assign)id <HomeTableViewDelegate> scrollDelegate;
//图片的加载
加载本地的图片方式
加载网络图片方式
URL是图片在网路上的存储地址
当一个变量用的次数多的时候就声明为全局变量,当用的次数很少的时候那么就用tag值
// 过渡形式实现翻转动画
UIViewAnimationTransition transition = flip?UIViewAnimationTransitionFlipFromLeft:UIViewAnimationTransitionFlipFromRight;
//注意
// 3.数据传递。(一是数据,二是子视图 当两者所有存在是才能完成数据的传递)
_tableView.dataList = _homeModels;
_posterView.dataList = _homeModels;
@property (nonatomic, strong)HomeModel *model;//注意model属性用 strong
//把字典存储为一个类的形式,属性就是key值,value就是属性的值