修复ios7 uitableviewcell 编辑状态下 删除按钮被覆盖

作者:暗夜星辰 发布于:2014-1-10 15:25 Friday 分类:IOS学习笔记

自从sdk升级到ios7之后,问题不断,最近又发现一个问题,

在点击cell删除的时候,删除按钮被前面的view所覆盖,就去google了一下,在stackoverflow上找到了相应的解答,

就是自定义一个uitableviewcell的子类,然后重写layoutSubviews方法,其它的什么也不用动

方法如下:

 

第一种解决办法:

// Fix for iOS7, when backgroundView comes above "delete" button
- (void)willTransitionToState:(UITableViewCellStateMask)state {
    [super willTransitionToState:state];
    [self sendSubviewToBack:self.backgroundView];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self sendSubviewToBack:self.backgroundView];
    });
}

- (void)didTransitionToState:(UITableViewCellStateMask)state {
    [super didTransitionToState:state];
    [self sendSubviewToBack:self.backgroundView];
}

第二种解决办法:

- (void)layoutSubviews
{
    [super layoutSubviews];

    for (UIView *subview in self.subviews) {

        for (UIView *subview2 in subview.subviews) {

            if ([NSStringFromClass([subview2 class]) isEqualToString:@"UITableViewCellDeleteConfirmationView"]) { // move delete confirmation view

            [subview bringSubviewToFront:subview2];

        }
    }
}

第三种解决办法(个人感觉比较简洁):

- (void)layoutSubviews
{
    [super layoutSubviews];
    
    if (self.isEditing) {
        [self sendSubviewToBack:self.contentView];
    }

}

第四种解决办法:

- (void) layoutSubviews {
    [super layoutSubviews];

    if ([ [ [UIDevice currentDevice] systemVersion] compare: @"7.0" options: NSNumericSearch] != NSOrderedAscending) {
        if (iOS7 == YES) {
            self.backgroundView.frame = CGRectMake(0, self.backgroundView.frame.origin.y,
                                                   self.backgroundView.frame.size.width, self.backgroundView.frame.size.height);
    }
}



标签: IOS xcode UITableViewCell

发表评论:

©2012-2014 woodbunny.com 木头♥兔子的小屋 sitemap