1

複数の行を含むTableViewがあります。各行には、異なるカスタムUITableViewCellがあります。UIActionSheetを使用して、このセルの色を変更する必要があります。つまり、行を選択すると、セルの特定の色を選択するように求めるアクションシートがポップアップ表示されます。もう1つの重要なことは、セルが画面外に出ても、セルは色を保持する必要があるということです。

これが私のコードです。私のコードの問題は、セルがリアルタイムで更新されていないことです。行を再度選択すると、セルの色が更新されます。もう1つの問題は、下にスクロールすると、セルの色がデフォルトの白に変わることです。

UIColor *cellColour;

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    switch (indexPath.row)
       {
        case 0:
            [self displayActionSheet];
            cell.backgroundColor=cellColour;
            break;
        case 1:
            cell.backgroundColor=[UIColor yellowColor];
            break;
        default:
            break;
    }
}

-(void) displayActionSheet
{
    UIActionSheet *popupQuery = [[UIActionSheet alloc] initWithTitle:@"Select row colour"   delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Red",@"Green",nil];

    popupQuery.actionSheetStyle = UIActionSheetStyleDefault;

    [popupQuery showInView:self.view];

    [popupQuery release];
}

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch (buttonIndex)
    {
      case 0:
        NSLog(@"Red");
        cellColour=UIColor.redColor;
        break;
      case 1:
        NSLog(@"Green");
        cellColour=UIColor.greenColor;
        break;
      case 2:
        NSLog(@"Pressed Cancel");
        cellColour=nil;
        break;
      default:
        break;
    }   
}

助けてください。

4

1 に答える 1

2

UIActionSheet動作は非同期であるため、これは正常です。

を呼び出すとdisplayActionSheet、画面にが表示されUIActionSheet、コードが続行されます(ユーザーがアクションシートのボタンをタップするのを待たずに)。その後、ユーザーがアクションシートのボタンの1つをタップすると、デリゲートメソッドactionSheet: clickedButtonAtIndex:が呼び出されます。

あなたがする必要があるのは:

  • メソッド(ここで設定する)でプロパティ(実際にはクラスのものであり、質問のコードのようなグローバル変数ではないcellColorことを願っています!!!)を使用して、セルが再利用されるたびに色が使用されるようにします画面に表示されます@propertytableView:cellForRowAtIndexPath:cell.backgroundColor = cellColour;
  • ユーザーがアクションシートで色を選択したときにデリゲートメソッドを呼び出し[tableView reloadData]actionSheet:clickedButtonAtIndex:tableViewを再読み込みし、セルの色を更新します。
于 2012-09-15T17:02:52.243 に答える