У меня есть таблица с пользовательской ячейкой, в ячейках два 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;
}
Обратите внимание, что изображения находятся в представлениях, потому что я хочу добавить в них ярлыки, и я не хотел скрывать/откладывать целую кучу вещей. –
Использование Alpha тоже не работает, тот же результат. –
Я отключил Y-координату, и она работает нормально, всегда там. Конечно, проблема в том, что мне нужно ее переместить! Я неправильно меняю координату Y? –