iOS开发——完整项目实战OC篇&百思不得姐第四天

iOS开发——完整项目实战OC篇&百思不得姐第四天



上午


一:自定义按钮使用九宫格布局

二:控件不能点击

三:获取用户点击了那个按钮

四:调整按钮内部控件的位置:主流-》上下

五:不能直接使用self.navigationController中或者View中获取导航控制器

方法一:

方法二:

六:布局取整

 1     // 总行数
 2
 3 //    NSUInteger rows = sqaures.count / maxCols;
 4
 5 //    if (sqaures.count % maxCols) { // 不能整除, + 1
 6
 7 //        rows++;
 8
 9 //    }
10
11
12     // 总页数 == (总个数 + 每页的最大数 - 1) / 每页最大数
13     NSUInteger rows = (sqaures.count + maxCols - 1) / maxCols;
14
15  

七:关于图片拉伸IB上怎么使用

八:tableView-Group默认下移35:即tableView的分组样式会默认下移35像素

1 -(void)setFrame:(CGRect)frame {
2     frame.origin.y -= (35 - 10);
3     [super setFrame:frame];
4 }

或者:

1 self.tableView.contentInset = UIEdgeInsetsMake(-25, 0, 0, 0);

九:设置分割线

创建n个UIView放倒上面

按钮左右-1

加一张有分割线的图片

最好的方法

/**
 *  使用图片设置分割线:还可以直接使用UIView或者设置每个按钮的左右或者上下变化一个像素
 */
-(void)setUp
{
    self.titleLabel.textAlignment = NSTextAlignmentCenter;
    [self setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    self.titleLabel.font = [UIFont systemFontOfSize:15];
    [self setBackgroundImage:[UIImage imageNamed:@"mainCellBackground"] forState:UIControlStateNormal];

//    self.backgroundColor = [UIColor orangeColor];
}
 

十:监听多个按钮中,用户点击那一个按钮

self.subViews  indexOfObject:btw
self.square[index]


下午


十一:网络请求基本步骤及处理

 1 //请求URL
 2     NSString *requestUrl = @"";
 3
 4     //请求参数
 5     NSMutableDictionary *dict = [NSMutableDictionary dictionary];
 6     dict[@""] = @"";
 7
 8     /**      *  发送GET请求      *///    __weak typeof(self) weakSelf = self;     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];     [manager GET:requestUrl parameters:dict success:^void(NSURLSessionDataTask *data, id responer) {         /**          *  如果返回数据为空          */
 9         if (responer == nil) {
10
11             return;         }
12
13             } failure:^void(NSURLSessionDataTask *data, NSError * error) {                 /**          *  请求失败后的状态码          */         if (error.code == NSURLErrorCancelled) return;                 if (error.code == NSURLErrorTimedOut) {                     } else {                     }
14     }];
15 }

十二:清楚缓存:(文件夹没有直接的大小属性,需要遍历所有文件获取大小)

1:缓存类型

2:获取缓存

或者

封装成分类

 1 - (NSInteger)fileSize
 2 {
 3     // 文件管理者
 4     NSFileManager *mgr = [NSFileManager defaultManager];
 5     // 是否为文件夹
 6     BOOL isDirectory = NO;
 7     // 这个路径是否存在
 8     BOOL exists = [mgr fileExistsAtPath:self isDirectory:&isDirectory];
 9     // 路径不存在
10     if (exists == NO) return 0;
11
12     if (isDirectory) { // 文件夹
13         // 总大小
14         NSInteger size = 0;
15         // 获得文件夹中的所有内容
16         NSDirectoryEnumerator *enumerator = [mgr enumeratorAtPath:self];
17         for (NSString *subpath in enumerator) {
18             // 获得全路径
19             NSString *fullSubpath = [self stringByAppendingPathComponent:subpath];
20             // 获得文件属性
21             size += [mgr attributesOfItemAtPath:fullSubpath error:nil].fileSize;
22         }
23         return size;
24     } else { // 文件
25         return [mgr attributesOfItemAtPath:self error:nil].fileSize;
26     }
27 }
28  

3:清理缓存

 1 - (void)clearCache
 2 {
 3     [SVProgressHUD showWithStatus:@"正在清除缓存" maskType:SVProgressHUDMaskTypeBlack];
 4
 5     [[[NSOperationQueue alloc] init] addOperationWithBlock:^{
 6         [[NSFileManager defaultManager] removeItemAtPath:XMGCacheFile error:nil];
 7
 8         [[NSOperationQueue mainQueue] addOperationWithBlock:^{
 9             [SVProgressHUD showSuccessWithStatus:@"清除成功"];
10
11             self.textLabel.text = XMGDefaultText;
12
13             // 禁止点击事件
14             self.userInteractionEnabled = NO;
15         }];
16     }];
17 }
18  

十三:线程通讯

十四:实现不能选中,只能点击

十五:根据不同的ID使用不同的Cell

十六:文件常用参数

文件大小

文件类型

十七:常用运行时类型

  • v->void
  • :->SEL
  • #->Class
  • @->id
  • *->char *
  • ?->unknow
  • ^type->Pointer


晚上


时间: 2024-08-15 08:56:35

iOS开发——完整项目实战OC篇&百思不得姐第四天的相关文章

iOS开发——完整项目实战OC篇&百思不得姐第十一天

百思不得姐第十一天 一:模型中没有ID这个属性 为模型增加一个属性ID,设置名字替换 /** id */ @property (nonatomic, copy) NSString *ID; 替换: + (NSDictionary *)replacedKeyFromPropertyName {     return @{@"ID" : @"id"}; } 二:错误的将数组当作字典来用(其实就是没有数据,比如刷新数据已经没有了,或者直接就是0) 通过堆栈定位错误 最后一

iOS开发——完整项目实战OC篇&百思不得姐第一天

百思不得姐第一天 做好准备,我们要开干了...... 先声明,我不过给出过多的代码实现,除非是一些重要的(开发中常用的),或者是比较难理解的. 主要介绍一些思路和简单功能的总结,还有一些遇到的错误及处理! 上午 一:修改项目名称(之前是Buble DisplayName) 二:删除(没有launchXIB的时候会显示界面错误),再iOS8以后屏幕的显示跟启动图片有关 需要删除对应,并且设置launchImages 或者我们可以自己在images.xcasesets中新建我们的launchImag

iOS开发——完整项目实战OC篇&百思不得姐第八天

百思不得姐第八天 上午 一:监听ScrollView停止两种方法 代码实现滚动的时候:必须要有动画 拖拽实现滚动的时候 二:ScrollView中,对应的X/Y宽高都相等的时候frmae就等一bounds 三:判断View是否在对应的View上面 1:判断父控件 2:看Window是否有值 3:是否创建加载 四:autormaticllyAdjustScrollViewInsets 五:内边距设置 1:tableView尺寸还是屏幕的尺寸(高度) 2:不被导航栏河tabBar挡住(用户能看齐所有

iOS开发——完整项目实战OC篇&百思不得姐第五天

百思不得姐第五天 上午 一:蒙板 tabBarController:addsubViews Window:rootViewController Modal:presentViewController(rootViewController) 二:显示界面不是想要的效果 由于是使用Xib所以默认在ViewDidLoad中的frame是对应Xib的frame:(600,600) 我们如果要实现布局应该在-viewDidLayoutSubViews实现 但是如果真的要在ViewDidLoad里面实现我们

iOS开发——完整项目实战OC篇&百思不得姐第三天

百思不得姐第三天 上午 错误:键盘处理 设置cell的分割线 方法一:添加一个View再上面 方法二:修改对应的Frame 拦截系统frame的设置,根据需求修改对应的值 不管别人传什么进来原值都不变,使用我们默认的值 优化 控制器挂掉取消 AFN内部实现 直接终止请求 暂停请求 取消请求总结 AFN返回码 debug不能全为小写 两者不同,下面的带IBOutlet的内部会隐士的强引用着他 所以调用方式是先打印后面的,就是说走完第一行之后并且没有销毁,等}走完之后就销毁 下午 设置圆形图片的简单

iOS开发——完整项目实战OC篇&百思不得姐第二天

百思不得姐第二天 上午 一调用父类先后顺序问题 二:手势滑动 解决问题 1 // 什么时候调用:每次触发手势之前都会询问下代理,是否触发. 2 // 作用:拦截手势触发 3 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer 4 { 5 // 注意:只有非根控制器才有滑动返回功能,根控制器没有. 6 // 判断导航控制器是否只有一个子控制器,如果只有一个子控制器,肯定是根控制器 7 if (s

iOS开发——完整项目实战OC篇&百思不得姐第十天

百思不得姐第十天 一:设置时间的显示 显示如下 二:MJExtension类型(名字)的指定——映射 1.在模型实中 2.字典转模型中 三:常见问题 问题1:多个对一个 有时候可能会有多个属性对应一个名字的时候我们就需要使用的到数组 问题2:子模型中的名字 问题3:返回复杂的数据(比如在一个字典里面还有一个字典再在里面有一个url数组) 统一处理 四:模型中嵌套模型:数组中存放模型(模型里面有数组数组里面又装着模型) 或者在代理或在一个独立的文件中的load方法中 五:没有注释 没有参与编译 @

iOS开发——完整项目实战OC篇&百思不得姐第六天

百思不得姐第六天 上午 一:使用Xib加载View 一般我们直接在分类里面,因为Xib加载的代码都是一样 二:键盘的两个常见属性 inoutAccessoryView inputView 三:切换系统和自定义键盘的简单使用方式,是不是很变态 根据使用的键盘判断类型并且切换 四:使用动画的方式,其实就是设置切换的时间就可以了 五:特殊需求,直接总定义并且添加View(不使用inoutAccessoryView) 使用通知实现工具条跟着键盘的移动:(上移键盘的高度) 1:改变Y值,上下改变Y值->使

iOS开发——完整项目实战OC篇&百思不得姐第七天

百思不得姐第七天 上午 一:传值方式 谁传值(主动方):谁发通知. 谁传值(主动方):创建Blcok(判断). 谁传值(主动方):创建协议,代理方法. 详细请看: http://www.cnblogs.com/iCocos/p/4659878.html http://www.cnblogs.com/iCocos/p/4550169.html 二:按钮中的文字获取 方法一: 方法二: 将数组的所有path对应的属性取出来,放到一个数组厘面去 三:装逼试判断:三木运算 四:数组不能一边遍历一边删除