0

私は、accessoryView 画像といくつかのカスタム ボタンの 2 つの画像を設定するカスタム セルを使用しています。accessoriesView イメージが最初に表示されます。ユーザーが行をスワイプすると、accessoryView 画像が非表示になり、ボタンが再表示されます。ユーザーが「スワイプを解除」(または別の場所をタップ) すると、ボタンが非表示になり、accessoryView が表示されます。次の場合を除いて、これはすべて正常に機能します。

1)画面を読み込みます。accessoriesView 画像があり、ボタンが隠されています。良い。

2)行をスワイプします。accessoriesView が消え、ボタンが表示されます。良い。

3) 表を下にスクロールして、さらにセルを表示します (再利用可能なセルを使用しています)。すべての新しいセルは、accessoryView で表示され、ボタンは表示されません。いいですね、予想通り。

4)スワイプした元のセルまでスクロールアップします。私は次のように、accessoryView 画像とボタンの両方を確認します。 (

ここにいくつかのコードがあります: 私のカスタム セル オブジェクトには、次のものがあります。

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];
    if (selected)
    {
        self.accessoryView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"arrow-right-black.png"]];
        UIImage *selectedRowImage = [UIImage imageNamed:@"table-selectedcellbg-red-45px-stretch.png"];
        self.selectedBackgroundView = [[UIImageView alloc]initWithImage:[selectedRowImage resizableImageWithCapInsets:UIEdgeInsetsMake(selectedRowImage.size.height, selectedRowImage.size.width/2, selectedRowImage.size.height, selectedRowImage.size.width/2)]];
    }
    else
    {
        self.accessoryView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"arrow-right.png"]];
        self.selectedBackgroundView = [[UIImageView alloc]initWithImage:[[UIImage alloc]init]];
    }
}

- (void)swipeCell 
{
    [self setSelected:NO animated:NO];
    self.accessoryView = nil;

    swipeButtons.hidden = NO;
}
- (void)unswipeCell
{
    [self setSelected:NO animated:NO];
    self.accessoryView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"arrow-right.png"]];
    swipeButtons.hidden = YES; 
}

cellForRowAtIndexPath で、セルがスワイプされたかどうかを確認します。

if (self.indexPathSwipeButton != nil && self.indexPathSwipeButton.row == indexPath.row)
{
    [cell swipeCell];
}
else
{
    [cell unswipeCell];
}
return cell;

何か案は?

4

1 に答える 1

0

[self setSelected:NO animated:NO];in method(void)swipeCell と in method を使用しますが- (void)unswipeCell. 、 in (void)swipeCellit は である必要があります[self setSelected:YES animated:NO];

それが役に立てば幸い

于 2013-07-02T07:02:23.280 に答える