4

私はカスタム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)編集モード

ここに画像の説明を入力してください

2)編集後(IOS 5.0)

ここに画像の説明を入力してください

3)編集後(IOS 5.1以降)

ここに画像の説明を入力してください

上にスクロールしてから下にスクロールすると(セルを再描画するため)、スイッチが再び表示されます。なぜこれが起こるのか誰かが知っていますか?iOS 5.0でチャームのように機能し、現在は機能しないのは不思議です。

4

2 に答える 2

1

問題は、

[self.alarmSwitch setEnabled:NO];

とsetAlphaアニメーション。

この問題を解決する最も簡単な方法は、次のようにsetAlphaの前にアニメーションブロック内のsetEnabled行を呼び出すことです。

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

ちなみに、なぜenableプロパティをNOに設定しているのですか?alphaプロパティを0に設定するだけで十分です。

于 2012-10-15T12:19:16.250 に答える
0

tableViewのsetEditingメソッドをどこで呼び出していますか?ビューが表示されたときに呼び出されるかどうかを確認してください。

于 2012-10-08T06:21:43.570 に答える