您的位置:首页 > 移动开发 > IOS开发

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: