关于UITableView的一些老是忘记的小杂碎
1:如何取消单元格的选中状态
简简单单的一句
[TableView deselectRowAtIndexPath:[TableView indexPathForSelectedRow] animated:YES];解决。
2:通知撤销
通知中心不会保留(retain)监听器对象,在通知中心注册过的对象,必须在该对象释放前取消注册。否则,当相应的通知再次出现时,通知中心仍然会向该监听器发送消息。因为相应的监听器对象已经被释放了,所以可能会导致应用崩溃
//通知中心提供了相应的方法来取消注册监听器
- (void)removeObserver:(id)observer;
- (void)removeObserver:(id)observer name:(NSString *)aName object:(id)anObject;
//一般在监听器销毁之前取消注册(如在监听器中加入下列代码):
- (void)dealloc {
//[super dealloc]; 非ARC中需要调用此句
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
3.slider
[slider setThumbImage:[UIImage imageNamed:@"sc_sliderBtn"] forState:UIControlStateNormal];
自定义滑块的大小--需要重写父类的下方法:
-(CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value {
rect.origin.x=rect.origin.x-10;
rect.size.width=rect.size.width+20;
return CGRectInset([super thumbRectForBounds:bounds trackRect:rect value:value],10,10);
}
接下来是滑动时覆盖的图或者颜色设置:
UIImage *image = [[UIImage imageNamed:@"sc_slider"] resizableImageWithCapInsets:UIEdgeInsetsZero];//图片模式,不设置的话会被压缩
[slider setMinimumTrackImage:image forState:UIControlStateNormal];//设置图片
//[slider setMinimumTrackTintColor:[UIColor redColor]];//设置颜色
然后是未覆盖的图或颜色设置:
UIImage *image2 = [[UIImage imageNamed:@"sc_slider2"] resizableImageWithCapInsets:UIEdgeInsetsZero];//图片模式,不设置的话会被压缩
[slider setMaximumTrackImage:image2 forState:UIControlStateNormal];//设置图片
//[slider setMaximumTrackTintColor:[UIColor lightGrayColor]];//颜色设置
4.删除单元格
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
}
// 自定义左滑显示编辑按钮
-(NSArray<UITableViewRowAction*>*)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewRowAction * rowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:NSLocalizedString(@"删除", nil) handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
NSLog(@"删除第%d行",indexPath.row);
}];
rowAction.backgroundColor = rgb(0xf1, 0xf1, 0xf1);//改变背景色
[[UIButton appearanceWhenContainedInInstancesOfClasses:@[[ShuSheCollectViewController class]]] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
NSArray *arr = @[rowAction];
return arr;
}