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];