Изображения кнопок над UITableViewCell очищаются при прокрутке - PullRequest
1 голос
/ 27 июня 2011

Я добавил три кнопки UIB с фоновым изображением в качестве изображения, не отмеченного переключателем, в каждой ячейке UITableView, и когда кто-нибудь щелкнет по нему, изображение кнопок изменится на изображение с проверенным переключателем, но проблема заключается в том, что при прокрутке UITableView изображения отмеченных кнопок очищаются, пока я прокручиваю.

Может кто-нибудь, пожалуйста, дайте мне любую идею ..!

Это код, в котором я объявил UIButtons

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
static NSString *CellSetup = @"CellSetup";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellSetup] autorelease];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.tag=[indexPath row];

myButton = [[UIButton alloc]initWithFrame:CGRectMake(20, 20, 20, 20)]; 
[myButton setImage:[UIImage imageNamed:@"radiounselect.png"] forState:UIControlStateNormal];
[myButton addTarget:self action:@selector(selectRadioButon:) forControlEvents:UIControlEventTouchUpInside];
myButton.tag = ++tagCount;
[cell.contentView addSubview:myButton];
tagCount++;

myButton2 = [[UIButton alloc]initWithFrame:CGRectMake(80, 20, 20, 20)]; 
[myButton2 setImage:[UIImage imageNamed:@"radiounselect.png"] forState:UIControlStateNormal];
[myButton2 addTarget:self action:@selector(selectRadioButon:) forControlEvents:UIControlEventTouchUpInside];
myButton2.tag = tagCount;
[cell.contentView addSubview:myButton2];
tagCount++;

myButton3 = [[UIButton alloc]initWithFrame:CGRectMake(140, 20, 20, 20)]; 
[myButton3 setImage:[UIImage imageNamed:@"radiounselect.png"] forState:UIControlStateNormal];
[myButton3 addTarget:self action:@selector(selectRadioButon:) forControlEvents:UIControlEventTouchUpInside];
myButton3.tag = tagCount;
[cell.contentView addSubview:myButton3];
return cell;}

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

btnTag = [sender tag];  
NSArray *arr = self.view.subviews; 
UITableView *tblCell = [arr objectAtIndex:0];
NSArray *cellAry = tblCell.subviews;

for (int i = 0; i <[cellAry count]; i++) {
    UITableViewCell *content = [cellAry objectAtIndex:i];
    NSArray *contentAry = content.contentView.subviews;
    for (int j = 0; j <[contentAry count]; j++) {
        UIButton *button = [contentAry objectAtIndex:j];
        if (btnTag == button.tag) {
            for (int k = 0; k <[contentAry count]; k++) {
                UIButton *button = [contentAry objectAtIndex:k];
                if (btnTag == button.tag) {
                    [button setImage:[UIImage imageNamed:@"radioselect.png"] forState:UIControlStateNormal];
                }
                else
                    [button setImage:[UIImage imageNamed:@"radiounselect.png"] forState:UIControlStateNormal];
            }
            return;
        }
    }
}

1 Ответ

1 голос
/ 27 июня 2011

используйте массив для хранения indexpath.row для отображения флажков chceked, см. Этот код

-(void)goodClick:(UIButton *)sender
{
    NSString *index = sender.titleLabel.text ;
    if([self.goodIndexArray containsObject:index]){
        //[sender setImage:[UIImage imageNamed:@"uncheckedRect.png"] forState:UIControlStateNormal];
        [self.goodIndexArray removeObject:index];

    }
    else
    {
        //[sender setImage:[UIImage imageNamed:@"checkedRect.png"] forState:UIControlStateNormal];
        [self.goodIndexArray addObject:index];
        if([self.badIndexArray containsObject:index])
            [self.badIndexArray removeObject:index];

    }
    [self done];
    [self.table reloadData];
}

Добавьте этот метод в качестве селектора для кнопки checbox и добавьте заголовок для вашей кнопки indexPath.row.

Это предоставляет вам способ идентификации ячейки, которая установила флажки.

И реализует проверки в методе cellForRowAtIndexPath.

см. Условия проверки

if([self.goodIndexArray containsObject:[NSString stringWithFormat:@"%i",coun]])
            {
                [goodButton setImage:[UIImage imageNamed:@"checkedRect.png"] forState:UIControlStateNormal];
            }
            else
                [goodButton setImage:[UIImage imageNamed:@"uncheckedRect.png"] forState:UIControlStateNormal];

Используйте это по своему усмотрению и решите свою проблему.

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