Перезагрузка изображений в кнопках, представленных в табличном представлении - PullRequest
0 голосов
/ 10 июня 2011

В моем табличном представлении у меня есть 4 UIButton s, 2 в каждой строке табличного представления. Изначально все кнопки имеют изображение (они жестко запрограммированы). Теперь в моем приложении есть кнопка, которая при нажатии заменяет изображения на кнопках новыми, используя метод setImage, а затем перезагружает представление таблицы. Но, к сожалению, я получаю старый вид таблицы только со старыми изображениями. Как я могу получить новые изображения на кнопках?

Моя cellForRowAtIndexPath реализация: - // Настройка внешнего вида ячеек табличного представления.

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    // if (cell == nil) {
    // cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    // }
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    if(indexPath.row == 0)
    {
        button1=[[UIButton alloc] initWithFrame:CGRectMake(15,5,100,87)];
        [button1 setImage:[UIImage imageNamed:@"BUTTON.png"] forState:UIControlStateNormal];
        [button1 addTarget:self action:@selector(ClickTo:) forControlEvents:UIControlEventTouchUpInside];
        [cell.contentView addSubview:self.button1];

        button2=[[UIButton alloc] initWithFrame:CGRectMake(135,5,100,87)];
        [button2 setImage:[UIImage imageNamed:@"TURN OFF.png"] forState:UIControlStateNormal];
        [button2 addTarget:self action:@selector(ClickTo:) forControlEvents:UIControlEventTouchUpInside];
        [cell.contentView addSubview:button2];
    }
    else if(indexPath.row == 1)
    {
        button3=[[UIButton alloc] initWithFrame:CGRectMake(15,5,100,87)];
        [button3 setImage:[UIImage imageNamed:@"JUMP.png"] forState:UIControlStateNormal];
        [button3 addTarget:self action:@selector(ClickTo:) forControlEvents:UIControlEventTouchUpInside];
        [cell.contentView addSubview:button3];


        button4=[[UIButton alloc] initWithFrame:CGRectMake(135,5,100,87)];
        [button4 setImage:[UIImage imageNamed:@"CLOSE.png"] forState:UIControlStateNormal];
        [button4 addTarget:self action:@selector(ClickTo:) forControlEvents:UIControlEventTouchUpInside];
        [cell.contentView addSubview:button4];
    }
    else
    {
        // Do something here
    }
    return cell;
}

Ответы [ 2 ]

0 голосов
/ 29 ноября 2014

Кажется, что у вас есть жестко запрограммированные изображения в ячейке для метода строк, поэтому всякий раз, когда вы перезагружаете таблицу, у них будут одинаковые изображения.

Итак, если вы хотите изменить их, возьмите логическую переменную и обновите ее следующим образом:

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

    статический NSString * CellIdentifier = @ "Cell";

    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; // if (cell == nil) { // cell = [[[UITableViewCell alloc] initWithFrame: CGRectZero reuseIdentifier: CellIdentifier] autorelease]; //} if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: CellIdentifier] autorelease]; }

    if (indexPath.row == 0) { button1 = [[UIButton alloc] initWithFrame: CGRectMake (15,5,100,87)];

    [button1 setImage:[UIImage imageNamed:@"BUTTON.png"] forState:UIControlStateNormal];
    [button1 addTarget:self action:@selector(ClickTo:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:self.button1];
    
    button2=[[UIButton alloc] initWithFrame:CGRectMake(135,5,100,87)];
    [button2 setImage:[UIImage imageNamed:@"TURN OFF.png"] forState:UIControlStateNormal];
    [button2 addTarget:self action:@selector(ClickTo:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:button2];
    

    } иначе, если (indexPath.row == 1) { button3 = [[UIButton alloc] initWithFrame: CGRectMake (15,5,100,87)]; [button3 setImage: [UIImage imageNamed: @ "JUMP.png"] forState: UIControlStateNormal]; [button3 addTarget: self action: @selector (ClickTo :) forControlEvents: UIControlEventTouchUpInside]; [cell.contentView addSubview: button3];

    button4=[[UIButton alloc] initWithFrame:CGRectMake(135,5,100,87)];
    [button4 setImage:[UIImage imageNamed:@"CLOSE.png"] forState:UIControlStateNormal];
    [button4 addTarget:self action:@selector(ClickTo:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:button4];
    

    } еще { // Делаем что-то здесь }

если (myflag) {

[button1 setImage: [UIImage imageNamed: @ "updatedImage1"] forState: UIControlStateNormal]; [button2 setImage: [UIImage imageNamed: @ "updatedImage2»] forState: UIControlStateNormal]; [button3 setImage: [UIImage imageNamed: @ "updatedImage3»] forState: UIControlStateNormal]; [button4 setImage: [UIImage imageNamed: @ "updatedImage4»] forState: UIControlStateNormal];

}

return cell;

}

// В методе Click to Method Установите myflag yes и перезагрузите таблицу

- (void) ClickTo: (IBAction) отправитель {

* 1 035 * myflag = ДА; [tableview reloadData];

}

0 голосов
/ 10 июня 2011

Возможно, вы устанавливаете изображение для неправильного состояния:

[myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];

Вам необходимо установить правильное значение для UIControlStateNormal - где правильное означает то, которое соответствует вашим кнопкам'текущее состояние (я).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...