Swift canEditRowAtIndexPath not working in UIPageViewController EZSwipeViewController

428 Views Asked by At

I have the following scenario and need help in resolving a tricky situation in the scenario

  1. There is an Xcode project and am using EzSwipeController for swipe (pagination effect) between three View Controllers at the moment.

  2. In my first ViewController (this viewController is fetched from my custom dynamic framework as part of my requirement) -

Code to fetch ViewController:

    userProfile.createProfileUI(userSession!) { result in
        switch result {
        case let .Success(profileViewController):

        myDetailsVC = profileViewController  //myDetailsVc is passed to EZSwipControllerDataSource array

        default:
            break
        }
    }
  1. The other two ViewControllers are within my project storyboard

The Problem -

In the first ViewController, there is a tableView with canEditRowAtIndexPath enabled for few cells (phone numbers).

So when I try to swipe the row, the EZSwipeController responds first and hence, I am not able to edit the row.

Here is what is happening - http://recordit.co/SOJgdeYchP

Here is what should happen - http://recordit.co/EBPSbjH31q

How do I handle this problem? Is there a way where I can override the default swipe controller action when I try to edit the row?

Please help!

1

There are 1 best solutions below

1
AudioBubble On

Attach the swipe gesture recognizer to a parent in the hierarchy.

If you're using a UITableViewController, replace it with a UIViewController with a UITableView inside it. Then just drag the gesture recognizer onto the view controller in Storyboard, and it'll attach to the UIViewController's Content View instead of the UITableView.

Though at the end of the day, this is inherently a flawed approach, since swiping to flip pages in an app is only ever viable if you don't have any elements on the pages that also have swipe gestures in them. If you do, even if you code a workaround to make the gesture recognizer for the element in the view controller (in this case, a table view cell) fire instead of the page flipping swipe gesture, that creates an inconsistent user experience.

My suggestion: don't use a table view for such a form altogether. On top of the aforementioned mechanical UX issue, from a user perception perspective, there's nothing indicating visually that this is a table view and not just a scroll view, so there's nothing indicating to the user that swipe actions (Delete) are available. Use a scroll view instead, and take a different approach to deleting (Delete buttons that are always visible, Delete buttons that are only visible after the user hits Edit somewhere, etc.).