Как я могу удалить старые изображения Uibutton с новыми изображениями в Charge-C - PullRequest
1 голос
/ 13 апреля 2011

У меня есть одна проблема при кодировании, то есть. Я отобразил 20 изображений в виде, используя мою пользовательскую кнопку с циклом. Через некоторое время я меняю изображения кнопок на новые изображения. Но то, что здесь происходит, старые изображения отображаются в задней части текущих изображений.

for(currentRow = 0; currentRow < 5; currentRow++)
    {
        for (currentColumn = 0 ; currentColumn < 4; currentColumn++)
        {
            if(indexValue<20)
            {
                printf("\n index value %d",indexValue);
                A *aObject = [aList objectAtIndex:indexValue];

                MyCustomButton *myButton = [[MyCustomButton alloc] initWithIdValue:aObject.aName];
                CGRect imageFrame = CGRectMake(currentColumn * 80+5, currentRow * 80+5, 67, 67);
                [myButton setImage:[UIImage imageNamed:aObject.aName] forState:UIControlStateNormal];
                [myButton setFrame:imageFrame];
                myButton.backgroundColor=[UIColor clearColor];
                [myButton addTarget:self  action:@selector(aAction:) forControlEvents:UIControlEventTouchUpInside];
                [myView addSubview:myButton];
                [myButton release];
                 myButton = nil;
}
}
}

помоги мне с этим,

Спасибо, Мадан Мохан.

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

Как уже упоминалось onnoweb: Вы не должны добавлять новую кнопку каждый раз, когда вы хотите изменить изображение.Подход, который я выбрал бы, состоит в том, чтобы создать все необходимые кнопки в viewDidLoad представления и добавить их туда.например, вот так: (псевдокод)

- (void)viewDidLoad
{
    for(int i = 0; i < columnCount; i++)
    {
        for(int j = 0; j < rowCount; j++)
        {

            MyCustomButton *myButton = [[MyCustomButton alloc] initWithIdValue:aObject.aName];
            CGRect imageFrame = CGRectMake(currentColumn * 80+5, currentRow * 80+5, 67, 67);
            forState:UIControlStateNormal];
            [myButton setFrame:imageFrame];
            myButton.backgroundColor=[UIColor clearColor];
            [myButton addTarget:self  action:@selector(aAction:) forControlEvents:UIControlEventTouchUpInside];
            [myView addSubview:myButton];
            [myButton release];
            myButton = nil;
        }
    }
}

Тогда вы можете просто изменить изображение в цикле следующими строками: (псевдокод)

            myButton = buttonMatrix[row][column];
            [myButton setImage:[UIImage imageNamed:aObject.aName] forState:UIControlStateNormal];

Этотакже гораздо меньше памяти, чем создание новых кнопок без освобождения старых.

0 голосов
/ 30 августа 2013

У вас есть два варианта решения проблемы:

1) сохранить указатели кнопок, которые вы создали в цикле, при обновлении изображения используйте указатель кнопки для вызова setImage: forState: снова это заменитстарое изображение в кнопке с новым изображением.И вы сохраняете время инициализации / уничтожения кнопок.

2) сохраняете указатели кнопок как шаг 1), вызываете [button removeFromSuperView], чтобы удалить кнопку из супер-просмотра, а затем заново создайте новую кнопку и вставьтесупер вид снова.Это не рекомендуется, потому что старые кнопки будут уничтожены, а новые кнопки будут инициализированы, и эти действия влияют на производительность (время), и если у вас есть другие дополнительные представления, добавленные в верхней части кнопки, после создания новой кнопкиВам нужно сделать так, чтобы все виды сверху кнопок снова были сверху.Поэтому, если у вас нет какой-либо конкретной причины, по которой вам нужно заново создать новую кнопку, просто выполните шаг 1), это просто и быстро.

...