2013-12-11 6 views
1

У меня есть Tableview и я использую ячейки customTableview для отображения ячейкиTableview изображения chaging при прокрутке с помощью пользовательского TableView

в клетке у меня есть 5 кнопок (рейтинг кнопка), когда я нажимаю на определенной кнопке, изображение баттон для изменила работает нормально, но когда я снова прокручивая TableView Тэй меняются на обычные кнопки рейтинга увидеть следующие изображения для ясности

Это изображение, прежде чем не прокрутки и нажав ничего на кнопку

This is the image before scrolling and clicking nothing on button

после нажатия на по рейтингу кнопки изображение меняется, как этот

enter image description here

но когда снова прокручивая клетки его изменения к первому изображению

пожалуйста, помогите мне

Код:

- (UITableViewCell)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    dataCell = (DataCel)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (dataCell==nil) 
    { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"DataCel" owner:self options:nil]; dataCell = [nib objectAtIndex:0]; 
    } 
    return dataCell; 
} 
+0

показать код внутри cellForRowAtIndexPath – manujmv

+1

Вы должны помнить/хранить состояние данных ячейки и заполнить еще раз! – Maulik

+0

я не имею ничего сделано в CellForRowAtIndexPath - (UITableViewCell *) Tableview: (UITableView *) Tableview cellForRowAtIndexPath: (NSIndexPath *) indexPath { статический NSString * CellIdentifier = @ "Cell"; dataCell = (DataCel *) [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; if (dataCell == nil) { NSArray * nib = [[NSBundle mainBundle] loadNibNamed: @ "DataCel" владелец: self опции: nil]; dataCell = [nib objectAtIndex: 0]; } данные возвратаCell; } – seenu

ответ

0

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

static NSString *cellIdentifier = @"Identifier"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

if(cell == nil) 
{ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil]; 
} 

for(id obj in cell.contentView.subviews) 
{ 
    if([obj isKindOfClass:[UIImageView class]] || [obj isKindOfClass:[UILabel class]]) 
    { 
     [obj removeFromSuperview]; 
    } 
} 

Это не позволит значения перекрываться.

0

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

1

вы должны сохранить насытить из изображений кнопок и в вашем

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

вставки кода, чтобы держать их в курсе напр:

static NSString *CellIdentifier = @"Cell"; 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) 
     { 
//create your cell here if it was not created 
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
      [cell.textLabel setFont:[UIFont boldSystemFontOfSize:13]]; 
      [cell.textLabel setTextColor:[UIColor darkGrayColor]]; 
      [cell.detailTextLabel setFont:[UIFont boldSystemFontOfSize:11]]; 
      [cell.detailTextLabel setTextColor:[UIColor lightGrayColor]]; 
      cell.detailTextLabel.numberOfLines = 2; 
     } 

     NSArray *array = [imageArray objectAtIndex:[indexPath row]]; 
     if([[array objectAtIndex:3] isEqual:@"rate3"]) 
     { 
      //set the code for the rating 3 
     } 
     else 
     { 
      //insert another rate depending on your object 
     } 
+0

Когда вы нажимаете на конкретную кнопку ставки, она не будет gotselect row в indexpath beacause, я сразу нажимаю кнопку, так как я могу получить индексный путь ячейки – seenu

+0

- это не кнопка внутри вашей ячейки? –

+0

, когда вы создаете свою кнопку в cellForRow, установите тег кнопки для текущей строки button.tag = [indexPath row]; В вашем приемнике введите следующее: - (void) setState: (id) отправитель { NSLog (@ "тег отправителя% d", [тег отправителя]); // это будет ваша текущая строка нажатой кнопки // вы можете получить текущую индексную таблицу с помощью NSIndexPath * indexPath = [NSIndexPath indexPathForRow: [sender tag] inSection: 0]; } –

0

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

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

{ 
    static NSString *cellId = @"cellId"; 
    UITableViewCell *cell = [categoriesTableview dequeueReusableCellWithIdentifier:cellId]; 
    if (cell==nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId]; 

    } 
    for (UIView *subview in [cell.contentView subviews]) { 
     [subview removeFromSuperview]; 
    } 

// ui goes here 

return cell 
} 
Смежные вопросы