Ответ 1
Вот одно линейное решение
self.tableView.multipleTouchEnabled = NO;
Я использую UITableView
в своем приложении, которое, когда tapped будет использовать UINavigationController
, чтобы нажать другой контроллер представления в стек контроллера контроллера навигации.
Однако, когда ячейка в представлении таблицы дважды добавлена, tableView:didSelectRowAtIndexPath:
вызывается дважды, заставляя контроллер навигации нажимать два из этих новых элементов управления представлением s в стеке и в результате получается следующий вывод консоли:
nested pop animation can result in corrupted navigation bar
Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
Это не очень важная проблема, потому что пользователи вряд ли будут выполнять двойной щелчок на ячейках представления таблицы, однако мне было интересно, есть ли элегантное решение для предотвращения такого рода неправильной навигации? (возможно, проверить контроллер навигации topViewController
и затем решить, действительно ли должен выполняться метод push pushViewController:
?).
Вот одно линейное решение
self.tableView.multipleTouchEnabled = NO;
Просто установите userInteractionEnabled
на NO
как это
в viewWillAppear
-(void)viewWillAppear:(BOOL)animated
{
// if you return from another viewController
[tableView setUserinteractionEnabled:YES];
}
-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// do your logic here and at the end just set user interaction to NO
[tableView setUserInteractionEnabled:NO];
}
Это заблокирует все пользовательские взаимодействия с вашим табличным представлением.
Исправление, которое я нашел для описанной здесь проблемы, - это весь код didSelectRowAtIndexPath в следующей проверке:
if ([[self navigationController] topViewController] == self) {
[your existing didSelectRowAtIndexPath code here]
}
Это проверяет, был ли еще один контроллер представления уже вставлен в верхнюю часть стека контроллера представления (и по-прежнему ожидает появления на экране по какой-либо причине).
Я считаю, что свойство multiTouchEnabled, упомянутое в другом месте, фактически относится к функции multi-touch, которая позволяет iOS регистрировать одновременно несколько сенсорных событий (например, сжимать до зума двумя пальцами на экране одновременно) чем несколько последовательных штрихов.
Иордания Соренсен модернизирована до быстрой:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
if self.navigationController?.topViewController == self
{
self.performSegueWithIdentifier("whatever", sender:self)
}
else{
// uncomment to break in else case print("fasttaper superfluous input was ignored")
}
}
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
if self.navigationController?.topViewController == self
{
return true
}
else{
return false
}
}
отключить множественное касание на вашей клетке
Вы можете установить для exclusiveTouch
значение true
для каждой ячейки.
Если для этого свойства задано значение true
получатель блокирует доставку сенсорных событий другим представлениям в том же окне. Значением по умолчанию этого свойства является false
.