IOS学习 Cell自定义
2014-09-30 10:49
423 查看
当进入删除编辑模式时,cell的subview有一个叫UITableViewCellDeleteConfirmationControl的subview,这代表删除按钮。可以修改该view达到修改删除按钮的位置,大小等属性。
当进入移动编辑模式时,cell的subview有一个叫UITableViewCellReorderControl的subview,这个代表移动按钮。可以修改该view达到修改移动按钮的位置,大小等属性。
当进入插入编辑模式时,cell的subview有一个叫UITableViewCellEditControl的subview,这个代表添加按钮。可以修改该view达到修改添加按钮的位置,大小等属性。
//当cell的状态变为编辑时,uitableview内部会自动调用该方法,重写该方法可以改变cell的布局
-(void)willTransitionToState:(UITableViewCellStateMask)state{
[super willTransitionToState:state];
}
//当cell的状态变为编辑时,uitableview内部会自动调用该方法,重写该方法可以改变cell的布局
-(void)didTransitionToState:(UITableViewCellStateMask)state{
[super didTransitionToState:state];
/*
typedef NS_OPTIONS(NSUInteger, UITableViewCellStateMask) {
UITableViewCellStateDefaultMask = 0,
UITableViewCellStateShowingEditControlMask = 1 << 0,
UITableViewCellStateShowingDeleteConfirmationMask = 1 << 1
};
*/
//滑动出现的删除按钮state是2的,编辑状态下的删除按钮state是3的
if (state == UITableViewCellStateShowingDeleteConfirmationMask||state==3) {
for (UIView *subview in self.subviews) {
//cell的subview为UITableViewCellDeleteConfirmationControl时,代表是删除按钮
if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) {
UIView *deleteButtonView = subview;
CGRect f = deleteButtonView.frame;
f.origin.x -= 50;
deleteButtonView.frame = f; }
}
}
//插入和移动的编辑状态state都是1
else if(state==UITableViewCellStateShowingEditControlMask){
for (UIView *subview in self.subviews) {
NSString* type = @"";
//判断如果cell当前是插入模式,则寻找UITableViewCellEditControl的subview,代表添加按钮
if (self.editingStyle==UITableViewCellEditingStyleInsert) {
type = @"UITableViewCellEditControl";
}
//否则寻找UITableViewCellReorderControl的subview,代表移动按钮
else type = @"UITableViewCellReorderControl";
if ([NSStringFromClass([subview class]) isEqualToString:type]) {
UIView *deleteButtonView = [subview.subviews objectAtIndex:0];
CGRect f = deleteButtonView.frame;
f.origin.x -= 50;
deleteButtonView.frame = f;
}
}
}
}
通过自己尝试:IOS7上UItableViewCell的下一层是UITableViewCellScrollView,UITableViewCellScrollView的下一层才是上面说的删除Button、contentView等(IOS6上面正确)。
还有就是在will时机更改subView(删除Button)的frame并没有效果,在did时机更改后会先做系统默认的动画,做完动画后在变成我自己设置的frame。
当进入移动编辑模式时,cell的subview有一个叫UITableViewCellReorderControl的subview,这个代表移动按钮。可以修改该view达到修改移动按钮的位置,大小等属性。
当进入插入编辑模式时,cell的subview有一个叫UITableViewCellEditControl的subview,这个代表添加按钮。可以修改该view达到修改添加按钮的位置,大小等属性。
//当cell的状态变为编辑时,uitableview内部会自动调用该方法,重写该方法可以改变cell的布局
-(void)willTransitionToState:(UITableViewCellStateMask)state{
[super willTransitionToState:state];
}
//当cell的状态变为编辑时,uitableview内部会自动调用该方法,重写该方法可以改变cell的布局
-(void)didTransitionToState:(UITableViewCellStateMask)state{
[super didTransitionToState:state];
/*
typedef NS_OPTIONS(NSUInteger, UITableViewCellStateMask) {
UITableViewCellStateDefaultMask = 0,
UITableViewCellStateShowingEditControlMask = 1 << 0,
UITableViewCellStateShowingDeleteConfirmationMask = 1 << 1
};
*/
//滑动出现的删除按钮state是2的,编辑状态下的删除按钮state是3的
if (state == UITableViewCellStateShowingDeleteConfirmationMask||state==3) {
for (UIView *subview in self.subviews) {
//cell的subview为UITableViewCellDeleteConfirmationControl时,代表是删除按钮
if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) {
UIView *deleteButtonView = subview;
CGRect f = deleteButtonView.frame;
f.origin.x -= 50;
deleteButtonView.frame = f; }
}
}
//插入和移动的编辑状态state都是1
else if(state==UITableViewCellStateShowingEditControlMask){
for (UIView *subview in self.subviews) {
NSString* type = @"";
//判断如果cell当前是插入模式,则寻找UITableViewCellEditControl的subview,代表添加按钮
if (self.editingStyle==UITableViewCellEditingStyleInsert) {
type = @"UITableViewCellEditControl";
}
//否则寻找UITableViewCellReorderControl的subview,代表移动按钮
else type = @"UITableViewCellReorderControl";
if ([NSStringFromClass([subview class]) isEqualToString:type]) {
UIView *deleteButtonView = [subview.subviews objectAtIndex:0];
CGRect f = deleteButtonView.frame;
f.origin.x -= 50;
deleteButtonView.frame = f;
}
}
}
}
通过自己尝试:IOS7上UItableViewCell的下一层是UITableViewCellScrollView,UITableViewCellScrollView的下一层才是上面说的删除Button、contentView等(IOS6上面正确)。
还有就是在will时机更改subView(删除Button)的frame并没有效果,在did时机更改后会先做系统默认的动画,做完动画后在变成我自己设置的frame。
相关文章推荐
- 【iOS学习笔记】iOS ⾃自定义cell的步骤
- iOS开发和学习中积累的一些经验总结提炼整理文章001——自定义Cell
- iOS菜鸟学习——通过nib文件自定义Cell
- iOS学习笔记 自定义cell并且文本自适应高度
- IOS学习之——自定义的Cell (代码)
- iOS开发学习之自定义cell
- 【iOS学习笔记 15-12-19】自定义cell侧滑按钮(UIButton)
- IOS学习之——Cell自定义内容视图&自定义辅助视图
- iOS菜鸟学习——storyboard中自定义cell
- iOS学习总结----通过代码自定义cell(cell的⾼度不⼀致)
- iOS学习爬坑记录8:关于自定义Cell的一点认识
- IOS学习之——自定义的Cell
- ((ios开发学习笔记 十二))Nib加载的方式实现自定义TableView
- [IOS]用自定义的cell来创建UITableView
- IOS开发学习:MKMapView自定义CalloutView
- ios tableView那些事 (十五)用故事模式自定义cell
- [IOS]用自定义的cell来创建UITableView
- ios 自定义cell右侧的图片显示
- iOS学习之UITableView中Cell…