У меня есть экран поповер, с внутри него:UITableViewCell перестает отвечать на запросы
- этикетки, которые могут или не могут появляться (название)
- панель поиска, которые могут или не могут появиться
- ярлык, который может отображаться или не отображаться, и имеет переменную высоту (справочную метку)
- scrollview, который может отображаться или не отображаться, и имеет переменную высоту (некоторые сведения о следующей таблице)
- таблица вид
Чтобы представить что-то хорошее, в viewDidLoad
, я перемещаю различные рамы, чтобы правильно разместить объекты и не использовать неиспользуемые пробелы, загромождающие мой popover. Кроме того, я затем изменяю размер таблицы (чтобы максимально использовать нужное место) и popover через contentSizeInPopover
(чтобы избежать почти пустого огромного popover). Все, что изменилось, похоже, работают хорошо, но у меня есть одна большая проблема: при всех изменениях размера некоторые ячейки моего UITableView становятся невосприимчивыми. Одна или две ячейки, обычно вторая, реагируют только, если я касаюсь их внешних углов, но остальная часть ячейки полностью игнорирует любые касания.
Я пробовал все: все перемещалось до viewWillAppear
, позволяя авторезистировать выполнять свою работу (похоже, не работает), но у меня все еще есть эта проблема каждый раз. Я обнаружил, что если я прокомментирую строки, связанные с изменением frame
таблицы, или те, что указаны в contentSizeInPopover
, проблема останавливается, но тогда мое представление перепутано, поэтому это не исправление.
Если бы кто-нибудь мог дать мне что-то, чтобы выбраться из этого беспорядка, это было бы потрясающе.
- (CGFloat)getHeightWithoutTable { return LIST_TITLE_HEIGHT + (self.searchBar.hidden ? 0 : LIST_SEARCH_BAR_HEIGHT) + (self.helpLabel.hidden ? 0 : self.helpLabel.frame.size.height + LIST_STD_SPACE) + (self.errorScrollView.hidden ? 0 : self.errorScrollView.frame.size.height + LIST_STD_SPACE); } -(void)viewDidLoad { [super viewDidLoad]; self.tableViewOutlet.backgroundView = nil; self.originData = [NSMutableArray array]; self.searchedData = [NSMutableArray array]; if (self.helper != nil) { CGFloat heightOffset = 0; // Content self.originData = [self.helper getData]; self.tableData = [NSMutableArray arrayWithArray:self.originData]; // Title NSString *title = [self.helper getPopoverTitle]; if (title == nil) { self.popoverTitle.hidden = YES; heightOffset -= LIST_TITLE_HEIGHT; } else { self.popoverTitle.text = [self.helper getPopoverTitle]; } // Search if ([self.originData count] [self getStdHeight]/3){ self.helpLabel.lineBreakMode = UILineBreakModeTailTruncation; [self.helpLabel sizeThatFits:CGSizeMake(self.helpLabel.frame.size.width, [self getStdHeight]/3)]; } heightOffset += (self.helpLabel.frame.size.height - LIST_HELP_STD_HEIGHT); } // Errors if ([self.helper respondsToSelector:@selector(getErrors)]) { self.errors = [self.helper getErrors]; } if (self.errors == nil || [self.errors count] == 0) { self.errorScrollView.hidden = YES; self.errorBg.hidden = YES; heightOffset -= LIST_ERROR_STD_HEIGHT + LIST_STD_SPACE; } else { [self createErrorView]; heightOffset += (self.errorScrollView.frame.size.height - LIST_ERROR_STD_HEIGHT); } // Table CGFloat previewHeight = LIST_CELL_HEIGHT * [self.tableData count] + LIST_STD_SPACE; CGFloat remainingHeight = LIST_MAX_HEIGHT - [self getHeightWithoutTable] - LIST_STD_SPACE; CGFloat tableHeight = MIN(previewHeight, remainingHeight); CGRect tableFrame = self.tableViewOutlet.frame; self.tableViewOutlet.frame = CGRectMake(tableFrame.origin.x, tableFrame.origin.y + heightOffset, LIST_WIDTH, tableHeight); // Selected items if ([helper getSelectedObject] != nil){ int index = [self.tableData indexOfObject:[helper getSelectedObject]]; NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0]; [self.tableViewOutlet scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; } } } - (CGSize)contentSizeForViewInPopover { if (self.navigationController) { return CGSizeMake(LIST_WIDTH, LIST_MAX_HEIGHT); } else { CGFloat totalHeight = [self getHeightWithoutTable] + self.tableViewOutlet.frame.size.height + LIST_STD_SPACE; return CGSizeMake(LIST_WIDTH, totalHeight); } }
(gist если вам нужна расцветка, чтобы помочь вам)
Изображения бобов:
Просто добавил код и изображение –