IOS UITableViewRowAction: пролистывание ячейки работает случайным образом
Я реализовал editActionsForRowAtIndexPath
это прекрасно работает, когда мне удается сильно ударить ячейку, но жест смахивания не всегда распознается, мне приходится многократно пролистывать, пока совершенно случайно это не сработает. Любая идея, почему это будет?
Вот мой код:
//Implement custom actions on swipe
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {
var deleteRowAction = UITableViewRowAction()
var ignoreRowAction = UITableViewRowAction()
var acceptRowAction = UITableViewRowAction()
switch (tabSegmentControl.selectedIndex) {
case 0:
deleteRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Remove" , handler: { (action:UITableViewRowAction!, indexPath:NSIndexPath!) -> Void in
let deleteMenu = UIAlertController(title: nil, message: "Do you really want to remove this friend?", preferredStyle: .ActionSheet)
let deleteAction = UIAlertAction(title: "Remove", style: UIAlertActionStyle.Default, handler: nil)
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
deleteMenu.addAction(deleteAction)
deleteMenu.addAction(cancelAction)
self.presentViewController(deleteMenu, animated: true, completion: nil)
})
return [deleteRowAction]
case 1:
if let friendR = friendRequests {
let friendRequest = friendR[indexPath.row]
deleteRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Refuse" , handler: { (action:UITableViewRowAction!, indexPath:NSIndexPath!) -> Void in
let deleteMenu = UIAlertController(title: nil, message: "Do you really want to refuse this request?", preferredStyle: .ActionSheet)
let deleteAction = UIAlertAction(title: "Remove", style: UIAlertActionStyle.Default, handler: {(alert: UIAlertAction!) in
self.friendActions(friendRequest.userId, command: "cancel", indexPath:indexPath)
}
)
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
deleteMenu.addAction(deleteAction)
deleteMenu.addAction(cancelAction)
self.presentViewController(deleteMenu, animated: true, completion: nil)
})
ignoreRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.Normal, title: "Ignore" , handler: { (action:UITableViewRowAction!, indexPath:NSIndexPath!) -> Void in
let ignoreMenu = UIAlertController(title: nil, message: "Do you really want to ignore this request?", preferredStyle: .ActionSheet)
let ignoreAction = UIAlertAction(title: "Ignore", style: UIAlertActionStyle.Default, handler: nil)
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
ignoreMenu.addAction(ignoreAction)
ignoreMenu.addAction(cancelAction)
self.presentViewController(ignoreMenu, animated: true, completion: nil)
})
acceptRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.Normal, title: "Accept" , handler: { (action:UITableViewRowAction!, indexPath:NSIndexPath!) -> Void in
let acceptMenu = UIAlertController(title: nil, message: "Do you really want to accept this request?", preferredStyle: .ActionSheet)
let acceptAction = UIAlertAction(title: "Ignore", style: UIAlertActionStyle.Default, handler: nil)
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
acceptMenu.addAction(acceptAction)
acceptMenu.addAction(cancelAction)
self.presentViewController(acceptMenu, animated: true, completion: nil)
})
acceptRowAction.backgroundColor = UIColor(red: 0.298, green: 0.851, blue: 0.3922, alpha: 1.0);
}
return [acceptRowAction, ignoreRowAction, deleteRowAction]
default:
break
}
return [deleteRowAction]
}
1 ответ
Я столкнулся с этой проблемой сегодня и обнаружил, что это из-за конкурирующего распознавателя жестов. Способ определить, является ли это вашей проблемой, заключается в том, что редактирование запускается только на очень быстрых пролистываниях, которые являются очень прямыми и перпендикулярными, справа налево.
Этот пост также объясняет проблему:
Проведите пальцем, чтобы удалить UITableViewCell очень трудно вызвать
Вы можете решить эту проблему, удалив конкурирующие распознаватели жестов или расставив приоритеты с помощью метода UIGestureRecognizerDelegate:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
или же
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer