uitableviewcell中的编辑模式仅适用于ios 5.0

时间:2012-10-06 13:19:59

标签: iphone objective-c ios cocoa-touch ios6

我制作了自定义tableviewcell并覆盖了方法
  - (void) setEditing:(BOOL)editing animated:(BOOL)animated
以便为编辑模式隐藏UISwitch

这是我的代码

-(void) setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];

    if (animated==YES) {
        // With animation
        if (editing == NO) {
            // Editing stopped
            [UIView animateWithDuration:0.3
                             animations:^{
                                  [self.alarmSwitch setAlpha:1.0];
                             }];
            [self.alarmSwitch setEnabled:YES];
        } else {
            // Editing started
             [UIView animateWithDuration:0.3 
                             animations:^{
                                  [self.alarmSwitch setAlpha:0.0];
                             }];
            [self.alarmSwitch setEnabled:NO];
        }
    } else {
        // Without animation
        // .................
    }
}

在ios 5.0中,这有效。从ios 5.1及更高版本开始,它再次停止显示alarmSwitch。这是一些截图。

1)编辑模式

enter image description here

2)编辑后(IOS 5.0)

enter image description here

3)编辑后(IOS 5.1及更高版本)

enter image description here

如果我向上滚动然后向下滚动(以便重绘单元格),则会再次显示开关。有没有人知道为什么会发生这种情况?奇怪的是,在iOS 5.0中工作就像一个魅力,现在它不起作用。

2 个答案:

答案 0 :(得分:1)

问题似乎是

的相互作用
[self.alarmSwitch setEnabled:NO];

和setAlpha动画。

解决问题的最简单方法是在setAlpha之前调用动画块内的setEnabled行,如下所示:

[UIView animateWithDuration:0.3
                         animations:^{
                             [self.alarmSwitch setEnabled:NO];
                             [self.alarmSwitch setAlpha:0.0];
                         }];

顺便问一下,为什么你甚至将启用的属性设置为NO?将alpha属性设置为0就足够了。

答案 1 :(得分:0)

你在哪里调用tableView的setEditing方法?只需检查在显示视图时是否调用它。