碎片2 iOS 代码总结

1.控制台输出的错误日志

http://www.jianshu.com/p/22c0997be8d7

2.bug:-[__NSCFNumber rangeOfCharacterFromSet:]: unrecognized selector sent to instance

这个是由于传的参数类型不对所导致,找了半天才找到原因。
比如
[cell setColumnTitle:[homeData objectAtIndex:row]];
这里其实是要传NSString类型,而其实返回的是NSArray类型,这个错误不会立即出发,而是过一段时间再出发,所以不好定位。

3.如果想让 整数除于整数 不损失精度的话,可以将某个整数强制转换为浮点型数据

NSIngter  diggcount = 11000;
 float wanCount =diggCount/10000; // 1
 float wanCount =(float)diggCount/10000; //1.1

4.bug:iOS 自定义TableviewCell 按钮复用问题] 按钮在cell上 避免复用

具体场景:点击cell上的button,button属性的改变会和cell的位置一一对应。


碎片2 iOS 代码总结_第1张图片
当点击全文时,button的hidden属性改变为Yes

常见问题:一般思路的话会出现问题:改变一个cell的button属性时,该属性不会改变。
原因:当点击cell上button时,要求改变button的hidden,然后重新加载(reload),但是重新加载时调用DataSource的cellForRowAtIndexPath方法,会重新创建一个对象,与原对象就不是一个对象了。


碎片2 iOS 代码总结_第2张图片
屏幕快照 2017-09-08 上午3.22.19.png

解决方法:


碎片2 iOS 代码总结_第3张图片
屏幕快照 2017-09-08 上午3.37.41.png

1.为按钮添加代理方法返回控制器
2.为cell创建一个Model ,model里面除了常规的显示数据外,还要预留一个Index 用来标记每个cell中的Btn.tag (这样的好处是,即使UI中cell复用了,但是每次点击的cell中的btn.tag是唯一的)
3.为cell预留一个SelectArray数组公共属性,通过改值将数据从tableView传递到cell中。
@property (nonatomic,strong) NSMutableArray *selectArr;

4.在控制器的按钮代理方法中,通过一个全局数组来记录当前点击的cell中的btn.tag (这里的特点或则说局限就是,数组中每次都只存一个tag,这也导致了点击cell出现勾选之后,必须再次点击当前cell,取消选择)

-(void)setModel:(TTCommentModel *)model{
    
    _model = model;
    
    qwButton.tag = _model.index;
}

按钮的tag和indexPath的row绑定。

#pragma mark - TransBtnsArrTTCommnetCellDelegate
-(void)TransBtnsArrTTCommnetCellWithBtn:(UIButton *)btn{

    selectBtn = btn;
    if (![self.selectedArray containsObject:@(btn.tag)]) {
        
        [self.selectedArray addObject:@(btn.tag)];
    }
   }

代理
当然selectedArray要通过懒加载创建好

5.cell里面对按钮状态的处理

-(void)setSelectArr:(NSMutableArray *)selectArr{
_selectArr = selectArr;

-(void)setSelectArr:(NSMutableArray *)selectArr{

    _selectArr = selectArr;
    
    if (_selectArr.count == 0) {
        
    }
    
    for (int i =0; i<_selectArr.count; i++) {
        
        if (qwButton.tag == [_selectArr[i] integerValue]) {
            
            qwButton.hidden = YES;
            
        }
    }

}

参考:https://m.2cto.com/kf/201704/622517.html

5.iOS - 固定宽度和字号,获取Label的frame;固定高度和字号,获取Label的frame

http://blog.csdn.net/qq_27364431/article/details/50561200

6.iOS 中 UIView 的 clipsTobounds 属性(UIView 和UIscrollView默认有区别)

clipsToBounds 决定了子视图的显示范围。
具体的说,就是当它取值为 YES 时,剪裁超出父视图范围的子视图部分;当它取值为 NO 时,不剪裁子视图。
默认值为 NO,但是在 UIScrollView 中,它的默认值是 YES,也就是说默认裁剪的。

7.当我使用cocoaPods引入pod YYModel时,调用该方法时崩溃;

但是直接引入是没问题的。待解决?

8. iOS支持ATS,必须使用HTTPS

测试的时候,将ATS的开关打开,Allow Arbitrary Loads设为NO,并且保证手机系统是iOS9以上。


碎片2 iOS 代码总结_第4张图片
Snip20170919_2.png

9.ios 里如何处理四舍五入的问题

double a = 10.0 / 4;
double b = 10 / 4;

注意:除法运算符并不是÷,而是一个正斜杠 /
1> 第1行中的10.0是浮点型,4是整型,因此会将4自动类型提升为浮点型后再进行运算,最后变量b的值是2.5
2> 第2行中的10和4都是整型,计算机中的运算有个原则:相同数据类型的值才能进行运算,而且运算结果依然是同一种数据类型。因此,整数除于整数,求出来的结果依然是整数,会损失小数部分。最后变量b的值是2。
3> 如果想让 整数除于整数 不损失精度的话,可以将某个整数强制转换为浮点型数据

10.bug:添加到父视图的子视图无法响应点击事件

向没有设定frame的父视图上添加有frame的子视图:会因为添加的那个时刻父视图没有创建出大小,而只能添加到宽高都为0的父视图上。【有时会子视图显现出来了,但是不可响应,因为父视图没大小】
<经常出现在封装的方法中。如果父视图的frame没用定大小而直接往上添加子视图,就会出现该问题。

11.自定义UIView等控件

当自定义时,注意加载UI和设置frame分开写;在init方法中创建,在layoutSubviews设置frame。

12.用导航控制器返回到指定控制器并有其自带方法

popToViewController用法 
方式一,不推荐
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES];

方式二,推荐
或(推荐下面这种,不受后期控制器数量影响)
for (UIViewController *controller in self.navigationController.viewControllers) {
    if ([controller isKindOfClass:[你要跳转到的Controller class]]) {
        [self.navigationControllerpopToViewController:controller animated:YES];
    }
}


方式三,推荐  这种方式适合返回指定控制器并调用其方法(比如刷新)
// 需要返回调用的
 MyIMPPlanController *myIMPVC = nil;
    for (int i = 0; i < self.navigationController.viewControllers.count; i++) {
        
        CustomViewController *cv = self.navigationController.viewControllers[i];
        if ([cv isKindOfClass:[MyIMPPlanController class]]) {
            
            myIMPVC = (MyIMPPlanController *)cv;
            break;
        }
    }

    [self.navigationController popToViewController:myIMPVC animated:YES];
    [myIMPVC refreshData];

13.scrollView滚动到指定位置

self.categaryScroll.contentOffset = CGPointMake(offsetX, 0);

你可能感兴趣的:(碎片2 iOS 代码总结)