在UITableViewCell ios 7.1.2中更改默认删除按钮的颜色

yat*_*dam 2 uitableview ios ios7.1

我开发了一个应用程序.并更改了删除按钮的默认红色.它工作得很清楚.但是在我升级我的iPad iOS 7.1.2之后,它的功能并不多.这是我用过的代码

 for (UIView *subview in self.subviews) {
        for(UIView *subview2 in subview.subviews){
            if ([NSStringFromClass([subview2 class]) isEqualToString:@"UITableViewCellDeleteConfirmationView"] ||) {
                ((UIView*)[subview2.subviews firstObject]).backgroundColor=[UIColor blueColor];
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

小智 7

问题是您正在尝试在错误的时间访问UITableViewCellDeleteConfirmationButton.

似乎Apple更改了实现,以便在触发willTransitionToState:之后,并在触发didTransitionToState之前,实际构造按钮并将其添加到视图层次结构中 :

访问didTransitionToState中的按钮:为时已晚.它在拖动时会有原始颜色,只有在完成滑动后才会改变颜色.

解决方法是在线程的运行循环中排队方法,而不是立即执行它,允许操作系统同时添加删除按钮视图.

- (void)willTransitionToState:(UITableViewCellStateMask)state
{
    if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask)
    {
        [self performSelector:@selector(setupDeleteButton) withObject:nil afterDelay:0];
    }
}

- (void)setupDeleteButton
{
    [self recurseToDeleteButtonInViews:[self subviews]];
}

- (void)recurseToDeleteButtonInViews:(NSArray *)subviews
{
    for (UIView *subview in subviews)
    {
    if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationButton"]){
            // You just found your button!
            // Do what ever you want with it!
            return;
        }
        if ([[subview subviews] count] > 0){
            [self recurseToDeleteButtonInViews:[subview subviews]];
        }
    }
    return;
}
Run Code Online (Sandbox Code Playgroud)

PS此代码与iOS 6.0不向后兼容,因为在iOS 7中更改了按钮视图的名称