3

カスタムセルを持つUITableViewがあり、セルにはUIImageViewとUILabelが含まれています。テーブルを初めてロードすると、各セルに同じ画像がロードされ、LabelArray から取得した異なるラベルがロードされます。

今私が話している画像は radioButton です。したがって、ユーザーがセルをクリックすると、画像が変わります。ユーザーがもう一度クリックすると、デフォルトの状態に変わります。

これを実現するために、この関数を使用し、さらに、selectionStatus という名前の customcell クラスで bool 変数を宣言しました。

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

    if(indexPath.row == 0)
    {
        if(cell.selectionStatus == TRUE)
        {           
            //Do your stuff
           cell.selectionStatus = FALSE;
        }
        else
        {
            //Do your stuff
            cell.selectionStatus = TRUE;
        }
    }

    if(indexPath.row == 1)
    {
        if(cell.selectionStatus == TRUE)
        {           
            //Do your stuff
           cell.selectionStatus = FALSE;
        }
        else
        {
            //Do your stuff
            cell.selectionStatus = TRUE;
        }
    }
}

これは正常に機能します (ただし、それが適切な方法であるかどうか、または cell.selected プロパティを確認できるかどうかを知りたい)、その効果を得ることができます。しかし、ビューを閉じて再度開くと、関数

@Anilで以下のコメントに基づいて編集

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {

    if([self.checkedIndexpath count]  == 0)
    {
        [tableCell.selectionImage setImage:@"xyz.png"];
    }
    else
    {        
        for (int i =0; i <[self.checkedIndexPath count]; i++)
        {
            NSIndexPath *path = [self.checkedIndexPath objectAtIndex:i];
            if ([path isEqual:indexPath])
            {               
                [tableCell.selectionImage setImage:@"abc.png"]
            }
            else
            {
                 [tableCell.selectionImage setImage:@"xyz.png"]            
             }
    }
return tableCell;

よろしくランジット

4

4 に答える 4

6

UItableViewCells を切り替える別のオプション...

willSelectRowAtIndexPath で、セルが既に選択されている場合は NSIndexPath に nil を返し、_selectedIndexPath インスタンス変数も設定します。

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

    if (cell.selected) {
        [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
        [self.tableView.delegate tableView:self.tableView didDeselectRowAtIndexPath:indexPath];
        indexPath = nil;
    }

    _selectedIndexPath = indexPath;

    return indexPath; 
}

didSelectRowAtIndexPath と didDeselectRowAtIndexPath で、プロパティ cell.selected に基づいてセルを更新します ...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    if (cell.selected) {
        // do stuff
    } else {
        // do stuff
    }
}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    if (cell.selected) {
        // do stuff
    } else {
        // do stuff
    }; 
}

最後に、viewDidLoad で clearsSelectionOnViewWillAppear プロパティを設定します...

- (void)viewDidLoad {
    [super viewDidLoad];
    self.clearsSelectionOnViewWillAppear = NO;
}
于 2014-03-26T18:48:20.400 に答える
3

選択した行のインデックス パスを didSelectRowAtIndexPath に保存し、cellForRowAtIndexPath でインデックス パスを確認する必要があります。対応する画像を設定します。

複数選択しますか?これを試して...

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

if(indexPath.row == 0)
{
    if(cell.selectionStatus == YES)
    {     
      [self.checkedIndexPaths addObject:indexPath];
        //Do your stuff
       cell.selectionStatus = NO;
    }
    else
    {
        [self.checkedIndexPaths removeObject:indexPath];
        //Do your stuff
        cell.selectionStatus = YES;
    }
}
}  


このような cellForIndexPath チェックで 編集

 // Set the default image for the cell. imageXYZ   
for (NSIndexPath *path in self.checkedIndexPath) 
{
    if ([path  isEqual:indexPath])
    {
        //set the changed image for the cell. imageABC
    }
    // no need of else part
}

表示されるとおりに正確に実行します

于 2013-01-31T12:01:59.213 に答える
0

モデル クラスでブール値を取得し、didSelectRow メソッドで更新して、テーブルをリロードします。cellForRowAtIndexPath では、このようにチェックします。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

 After making your cell check like that 

    ModelClass *yourModel=[self.yourArray objectAtIndex:indexPath.row];
   if(yourModel.selection)
     [cell.customImage setImage:[UIImage imageName:@"selected"]; 
  else
     [cell.customImage setImage:[UIImage imageName:@"un_selected"];

}

このリンクを確認してください https://github.com/adnanAhmad786/Quiz-View--TableView

于 2013-01-31T12:57:44.307 に答える