Нажмите кнопку на представлении таблицы, чтобы изменить изображение в моей ячейке представления таблицы - PullRequest
0 голосов
/ 17 февраля 2019

У меня одна ячейка табличного представления с одной кнопкой.При нажатии на кнопку ячейки, которая имеет один метод, чтобы проверить, если тег кнопки if равен indexPath.row.Тогда я пытаюсь изменить изображение.Но он не отображается.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"FilterTableViewCell";
    FilterTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.cellBtn.tag = indexPath.row;
    cell.radioImage.tag = indexPath.row;
    [cell.cellBtn addTarget:self action:@selector(ButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
    return cell;
}

-(void)ButtonClicked:(UIButton*)sender
{
     int rowNum = [(UIButton*)sender tag];
        NSIndexPath* indexPath = [NSIndexPath indexPathForRow:_currentSelectedIndex inSection:0];
    FilterTableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
    if (sender.tag == rowNum) {
        cell.radioImage.image = [UIImage imageNamed:@"selected.png"];
    } else {
        cell.radioImage.image = [UIImage imageNamed:@"unselected.png"];
    }

}

Здесь изображение кнопки не меняется.Что мне нужно, так это то, что когда я щелкаю по какой-либо ячейке, изображение конкретной ячейки должно меняться, а в других ячейках должно отображаться невыбранное изображение.И когда я нажимаю на любую ячейку, изображение которой изменяется как выбранное изображение.Мне нужно получить конкретные значения ячеек, такие как имя текстовой метки, имя подтекстовой метки.

Как мне этого добиться.В чем здесь проблема?

Обновлено:

    -(void)ButtonClicked:(UIButton*)sender
    {
       int rowNum = [(UIButton*)sender tag];
FilterTableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:rowNum inSection:0]];
 if (sender.tag != _currentSelectedIndex) {
        cell.radioImage.image = [UIImage imageNamed:@"selected.png"];
    } else {
        cell.radioImage.image = [UIImage imageNamed:@"unselected.png"];
    }
}

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Я прочитал твой код.Я обнаружил, что вы допустили ошибку при нажатии кнопки.

    -(void)ButtonClicked:(UIButton*)sender
    {
         int rowNum = [(UIButton*)sender tag];
            NSIndexPath* indexPath = [NSIndexPath indexPathForRow:_currentSelectedIndex inSection:0];
        FilterTableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
        if (sender.tag == rowNum) {
    cell.radioImage.image = [UIImage imageNamed:@"selected.png"];
        } else {
            cell.radioImage.image = [UIImage imageNamed:@"unselected.png"];
        }

    }

Условие if , которое вы поместили, всегда возвращает true, потому что сначала вы сохраняете отправительотметьте значение rowNum, а затем вы сравните оба этих параметра: .

СОСТОЯНИЕ ВСЕГДА ИСТИННО, И СЛЕДУЮЩИЙ КОД БУДЕТ ВЫПОЛНЕН

    cell.radioImage.image = [UIImage imageNamed:@"selected.png"];
0 голосов
/ 17 февраля 2019

добавьте этих двух делегатов tableView:

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    FilterTableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
    cell.radioImage.image = [UIImage imageNamed:@"unselected.png"];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    FilterTableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
    cell.radioImage.image = [UIImage imageNamed:@"selected.png"];
}

, а затем измените ButtonClicked на:

-(void)ButtonClicked:(UIButton*)sender
{
    int rowNum = [(UIButton*)sender tag];
    NSIndexPath* indexPath = [NSIndexPath indexPathForRow:_currentSelectedIndex inSection:0];
    if (sender.tag == rowNum) {
        [_tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
    }    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...