0

Я не совсем уверен, почему это работает медленно. Иногда я могу нажать на строку, и она мгновенно открывает всплывающее окно. Иногда я могу нажать на строку, и загрузка занимает 2-3 секунды. Почти похоже, что, возможно, код запутался в получении ячейки.Swift Представление popover из UITableView работает очень медленно

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let selectedItem = self.filteredTransactions[indexPath.row] 
    if let cell = tableView.cellForRowAtIndexPath(indexPath) as? BudgetHomeCell { 
     if let addTXView = self.storyboard?.instantiateViewControllerWithIdentifier("BHAddTXVC") as? BHAddTXVC { 
      addTXView.modalPresentationStyle = .Popover 
      addTXView.preferredContentSize = CGSizeMake(200, 200) 
      let popover = addTXView.popoverPresentationController 
      popover?.permittedArrowDirections = .Any 
      popover?.delegate = self 
      popover?.sourceView = cell.valueLabel 
      popover?.sourceRect = cell.valueLabel.bounds 
      addTXView.selectedTX = selectedItem 
      self.presentViewController(addTXView, animated: true, completion: nil) 
     } 
    } 
} 

Любые предложения по повышению производительности при представлении popover из метки значений в ячейке просмотра таблицы? Во время прослушивания я проверил навигатор отладки и нет CPU или всплесков памяти. Это происходит как для имитированного iPad, так и для iPad Air 2. У меня был бег, который сбрасывал с экрана. Я удалил это, и в некоторых случаях он все еще показывает всплывающее окно очень медленно.

+1

Вот дикое и сумасшедшее предположение: оберните весь интерьер вашего 'didSelectRowAtIndexPath' в блок' delay' (для моей функции 'delay', см. Http://stackoverflow.com/a/24318861/341994). Это может быть 'delay' of' 0', или '0.1'. Посмотрите, не имеет значения. Если это не поможет, хорошо, мы потерпели неудачу, вернем его обратно. – matt

+0

как предложено @matt, вы можете попытаться явно сделать код запущенным в основном потоке. –

+0

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

ответ

2

Кто-то ответил на это в другом посте. Проверьте это здесь: https://stackoverflow.com/a/27227446/4740794

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