Вы уверены, что два разных события запускаются одним и тем же касанием?Насколько я понимаю, UIKit генерирует только один UIEvent и отправляет его в самое верхнее представление в иерархии, которое отвечает на этот тип жеста.В этом случае, если кнопка находится выше в иерархии представления, как это возможно, она должна получать сообщение о событии.Но, возможно, я ошибаюсь.
Одним из решений, позволяющих определенно избежать возможности запуска двух событий, хотя, возможно, и не идеальным, было бы отключить выбор строки для tableView следующим образом:
self.tableView.allowsSelection = NO;
Затем добавьте представление, покрывающее остаток таблицы Cell, и добавьте распознаватель жестов в это представление.Поскольку они не охватывают одну и ту же область, вероятность возникновения конфликтных событий отсутствует.Конечно, чтобы узнать, какая строка была нажата, вам нужно добавить переменную экземпляра для кнопки и нового представления для хранения indexPath.Вы должны установить путь индекса при настройке tableCell в tableView: cellForRowAtIndexPath:
Надеюсь, что это полезно или дает вам новые идеи.