2013-06-20 1 views
0

У меня есть таблица с пользовательской ячейкой, в ячейках два UIView, верхний всегда отображается, а нижний скрыт.Столбец не всегда показывает скрытый контент после Unhiding

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

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

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

Я думаю, что это проблема повторного использования, но я понятия не имею, как обойти это.

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

cellID = @"Cell"; 

customCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath]; 

// Test to see if the Cell has already been built 
if (cell == nil) 
{ 
    cell = [[customCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; 
} 

// Check if the selected Cell is being drawn and unhide the pull down view and adjust y origin 
if(indexPath.row == selectedCell) 
{ 
    // Unhide the view 
    cell.pullDownView.hidden = NO; 

    CGRect tempFrame = cell.pullDownView.frame; 
    tempFrame.origin.y = [[secondViewY objectAtIndex:indexPath.row] floatValue]; 
    cell.pullDownView.frame = tempFrame; 

    // Image in second view  
    cell.mainImage2.image = [theImages objectAtIndex:indexPath.row]; 
} 
else 
{ 
    cell.pullDownView.hidden = YES; 
} 

// Image in first view 
cell.mainImage.image = [theImages objectAtIndex:indexPath.row]; 




return cell; 
} 

Так щелкать клетки вызывает didSelectRow, который выглядит как этот

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

if(selectedCell == indexPath.row) 
{ 
    selectedCell = -1; 
    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 
} 
else 
{ 
    selectedCell = indexPath.row; 
} 

// [tableView reloadData]; 

[tableView beginUpdates]; 
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationMiddle]; 
[tableView endUpdates]; 
} 

Я попытался как reloadData и BeginUpdates, как вы можете видеть, но это по-прежнему не работает. Это потому, что я скрываю/скрываю, должен ли я делать Alpha до 0, а затем 1 при выборе? Является ли это многоразовой ячейкой?

Охх для полноты. Вы можете заметить, что у меня есть таблица, где все высоты разные, поэтому я меняю Y второго UIView.

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

float returnHeightValue; 

if(indexPath.row == selectedCell) 
{ 
    returnHeightValue = [[selectedCellHeights objectAtIndex:indexPath.row] floatValue]; 
} 
else 
{ 
    returnHeightValue = [[normalCellHeights objectAtIndex:indexPath.row] floatValue]; 
} 


return returnHeightValue; 

} 
+0

Обратите внимание, что изображения находятся в представлениях, потому что я хочу добавить в них ярлыки, и я не хотел скрывать/откладывать целую кучу вещей. –

+0

Использование Alpha тоже не работает, тот же результат. –

+0

Я отключил Y-координату, и она работает нормально, всегда там. Конечно, проблема в том, что мне нужно ее переместить! Я неправильно меняю координату Y? –

ответ

0

Хорошо, все изменилось, так как скрытие и отображение содержимого в ячейке, которая изменилась, не работала так хорошо (в артефактах остались предметы, а иногда и вещи не появлялись).

Теперь я создаю две пользовательские ячейки, у которых есть все дополнительные объекты, когда ячейка выбрана, а другая - нет.

До сих пор кажется, что это намного лучший способ сделать это.

0

Хорошо, я изменил свое отношение к элементам. Я удалил UIView (который все они встроены), и вместо этого теперь у меня есть в моей .h моей пользовательской ячейки.

@property (nonatomic, strong) IBOutletCollection(UILabel) NSArray *pullDownItems; 
@property (weak, nonatomic) IBOutlet UIImageView *mainImage; 

Вместо

@property (weak, nonatomic) IBOutlet UIView *pullDownView; 

Хорошо, так что теперь я должен килоггер и переместить два элемента, а не один, но это намного лучше, чем звенеть их по отдельности было бы боль (есть около 10 UILabels). Я перечисляю массив таким образом;

for(UILabel *obj in cell.pullDownItems) 
    { 
     obj.hidden = NO; 
     tempFrame = obj.frame; 
     tempFrame.origin.y = tempFrame.origin.y - tempYOffset; 
     obj.frame = tempFrame; 
    } 

Любые новые предметы, которые я просто прикладываю.

+0

Я должен был сказать, что я тоже не использую автозапуск, который, вероятно, сделал бы все это для меня. –

Смежные вопросы