有几个界面就建几个文件夹
每个文件夹中都有三个文件夹,(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:
switch (swipe.direction) {
case UISwipeGestureRecognizerDirectionRight:
{
CGPoint point = [swipe locationInView:self.view];//这个是判断这个手势的点在这个控制器的View里面的位置
if (point.x < 20) {
[self.navigationController popToRootViewControllerAnimated:YES];
}
}//记住,当Case里面使用的是函数的时候可以不用大括号,但是当调用方法的时候必须使用大括号
break;
default:
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;
return 150;
}
/声明代理的时候必须用assign
@property (nonatomic, assign)id <HomeTableViewDelegate> scrollDelegate;
//图片的加载
加载本地的图片方式
加载网络图片方式
URL是图片在网路上的存储地址
当一个变量用的次数多的时候就声明为全局变量,当用的次数不多的时候那么就用tag值
// 过渡形式实现翻转动画
UIViewAnimationTransition transition = flip?UIViewAnimationTransitionFlipFromLeft:UIViewAnimationTransitionFlipFromRight;
//注意
// 3.数据传递。(一是数据,二是子视图 当二者全部存在是才能完成数据的传递)
_tableView.dataList = _homeModels;
_posterView.dataList = _homeModels;
_tableView.dataList = _homeModels;
_posterView.dataList = _homeModels;
@property (nonatomic, strong)HomeModel *model;//注意model属性用 strong
//把字典存储为一个类的形式,属性就是key值,value就是属性的值