2013-03-07 6 views
5

я наткнулся на странную ошибку в моем приложении:.UITableView толчок переход срабатывает несколько раз

Установка

Простой мастер-Detail приложение, iPhone стиль (т.е. без раскола зрения, нет поповер, просто контроллер навигации, контроллер табличного представления и контроллер вида).

enter image description here

Исправлена ​​ошибка

  1. Коснитесь «фон» часть вида таблицы (более темные серые части на скриншоте), как заголовок раздела или сноске.
  2. Удерживая палец на экране, коснитесь ячейки несколько раз.
  3. Освободите все пальцы. Взгляд «деталь» толкнул нормально, но при касании кнопки назад, вы увидите, что вид детали был сложен так много раз, как вы коснулись ячеек на шаге 2.

enter image description here

Вы можете также коснуться нескольких ячеек на шаге 2, и их точки зрения назначения будут уложены в правильном порядке :)

воспроизвести

Я был в состоянии воспроизвести ошибку, с чистой, недавно созданного приложения, и т он последний выпуск приложения Twitter для iPhone (прикосновением к метке «Загрузка» пальцем №1 и касанием твита несколько раз).

Однако я не мог вызвать такое же поведение в приложении «Настройки» на вкладке «Общие» (это представление сгруппированной таблицы).

Ошибка была воспроизведена на iOS 6.0 и 6.1. У меня нет устройств со старыми версиями для тестирования.

Вопрос

Это известный трюк при создании навигации/приложений на основе представлений таблицы, и если да, то есть решение, чтобы предотвратить это (странное) поведение? Или это ошибка iOS (и если да, то это уже известно от Apple)?

+0

Я не смог воспроизвести эту ошибку в своем приложении - как только будет выбрана ячейка, будет сдвинут segue: Я НЕ МОГУ выбрать несколько ячеек, как вы, - поэтому это может быть связано с конкретным способом вашего приложения (или других) ручка segue push. Один вопрос: почему у вас есть 3 segues на раскадровке между вашим столом и следующим viewController? Должно быть достаточно – Vinzzz

+0

Это было просто, чтобы разрешить тестирование segue на нескольких ячеек. В представлении таблицы есть статические ячейки, и я создал segue для каждой ячейки. Однако мое «реальное» приложение использует динамические ячейки, причем только один сегмент (созданный с помощью Ctrl + перетаскивание на следующий контроллер, довольно классический). Я просто добавил к вопросу, что я тестировал только на iOS 6.x. Вы тестируете более раннюю версию? –

+0

И у вас есть эта ошибка даже при настройке этого segue как «пользовательского» и программного действия: вызов 'performSegueWithIdentifier' из' didSelectCellAtIndexPath таблицы делегата '? Так я справляюсь с этим, я не могу выбрать несколько ячеек (iOS 6) – Vinzzz

ответ

0

Это исправляется Apple, в прошивке 7.

Для предыдущих версий ОС, Dan F's answer следует сделать трюк.

3

Возможной затычка меры вы могли бы использовать это реализовать

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

И использовать булев флаг или что-то, чтобы показать, что вы в настоящее время пытаетесь выполнить этот переход. например:

BOOL doingSegue = NO; 

-(void) viewWillAppear 
{ 

    doingSegue = NO; 
} 

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 
{ 

    if ([identifier isEqualToString:@"MySegueIdentifier"]) 
    { 
     if (doingSegue) 
     { 
      return NO; 
     } 
     else 
     { 
      doingSegue = YES; 
      return YES; 
     } 
    } 
    return YES; 
} 

Swift Версия

var doingSegue = false 

override func viewWillAppear(_ animated: Bool) { 
    doingSegue = false 
} 

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { 
    if identifier == "MySegueIdentifier" { 
     if doingSegue { 
      return false 
     } 
     else { 
      doingSegue = true 
      return true 
     } 
    } 
    return true 
} 
Смежные вопросы