9-1每日一结(tableview的常见错误与问题)

1.tableView里面的小细节:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone]; (这种是没有点击后的阴影效果)

self.mytableView.separatorStyle = UITableViewCellSeparatorStyleNone; 去掉线


2.上拉刷新的时候:

//去得当前数组的个数,判断page应该取到哪一个。。而不是盲目的+1;

if ((invaildAry.count)/10.0==(invaildAry.count)/10)
    {
        page=(invaildAry.count)/10+1;
    }
    else
    {
        page=floor((invaildAry.count)/10.0);
    }

在数据处理里面:

for (int i=0; i<listArty.count; i++) {
            BOOL has=NO;
            for (NSArray *art in invaildAry) {
                if (art==[listArty objectAtIndex:i]) {
                    has=YES;
                }
            }
            if (!has) {
                [invaildAry addObject:[listArty objectAtIndex:i]];
            }
        }

3.tableView的cell不重用的方法:

解决方法一:对在cell中添加的控件设置tag的方法

例如在微博内容中需要添加label,那么就可以对添加的label设置tag,然后新建cell的时候先remove前一个cell tag相同的label,再添加新的label,这样就不会出现cell内容的重叠。

[[cell viewWithTag:100] removeFromSuperview];

[[cell contentView] addSubview:contentLabel];

解决方法二:删除cell中的所有子视图

在实现微博界面中,一个cell会有多个控件(label,imageview...),按理说,对每一个控件都设置tag,按照第一种解决方法,应该是可以实现的。但是在实际运行过程中发现不行,还是会出现内容重叠的问题,所以采用第二种解决方法--在新建cell的时候,如果不是空就删除所有的子视图。

if (cell != nil)
{
[cell removeFromSuperview];//处理重用
}
if (cell != nil)
{
[cell removeFromSuperview];//处理重用
}

解决方法三: 通过为每个cell指定不同的重用标识符(reuseIdentifier)来解决。

重用机制是根据相同的标识符来重用cell的,标识符不同的cell不能彼此重用。于是我们将每个cell的标识符都设置为不同,就可以避免cell重用问题了。

NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d%d", [indexPath section], [indexPath row]];//以indexPath来唯一确定cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; //出列可重用的cell


解决方法四:直接初始化数组,在数组内添加了cell。

我直接在cell里面写方法。。。方法相当于在tableView的代理方法初始化cell

-(void)initCellArray
{
    for (int i=0; i<_listAry.count; i++) {
        ChooseGuiGeCell *choose=[[[NSBundle mainBundle]loadNibNamed:@"ChooseGuiGeCell" owner:self options:nil] lastObject];
        choose.selectionStyle=UITableViewCellSelectionStyleNone;
         NSArray *btnAry=[[_listAry objectAtIndex:i]valueForKey:@"data"];
        [choose initWithDoubleContentModelWihtArray:btnAry AndWithTypeName:[[_listAry objectAtIndex:i]valueForKey:@"product_specification_name"]];
        [_cellAry addObject:choose];
    }
    [_mtable reloadData];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

 ChooseGuiGeCell *cell=[_cellAry objectAtIndex:indexPath.row];
    cell.backgroundColor=[UIColor colorWithRed:225/255.0 green:225/255.0 blue:225/255.0 alpha:1];
//        [_cellAry addObject:cell];
    return cell;

};

4.tableview的重用与多选(多个选中删除)


在cell里面声明一个属性。。用来判断该单元格是否选中

用一个数组来声明每个cell的选中属性

在-taleview cellForRowAtindex:





5.利用xib与代码初始化view

一般view我们分成好几块来实现,因为可能接收下来的数据造成某个部分的view大小不固定。。。所以使用xib拖拽成属性。。接受完后在对view里面的属性和frame进行操作。

在要使用的viewController里面声明成属性:

kucun=[NewKuCun instance];//

[kucun initWithUIWith:nilAndWith:nilandType:0];

//如果在方法里面写入控件的话。。。每次initWithUIWith的时候。需要将添加的控件移除。。不然控件一直存在。。。

//如果控件为button的话。。每次都需要遍历按钮数组进行添加方法的操作。。。。

view里面的方法

+(NewKuCun *)instance;返回从xib初始化的界面。。。不做这一步的话得不到界面

-(void)initWithUIWith:(NSArray*)ary AndWith:(NSArray*)ary1 andType:(int)newType;。。。。对xib里面的控件进行大小调整。







错误小结:

1.-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable obje
意思是变的方法发送给一个不变的对象

//初始化变量时。。不要直接赋值。。不然就会变成不可变对象。

一般在数据接收下来的时候用(tableview下拉刷新)

historyAry=[NSMutableArray arrayWithArray:imageData];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值