How can I implement Swipe left and right to change data/views in swift IOS?

♀尐吖头ヾ 提交于 2019-12-22 00:25:37

问题


I want to implement swipe gesture left right feature to change data views in swift 5. I have two viewControllers - FeedsController which contains tableview and list of all videos in it. In FeedsController if I click on comment button it moves to commentViewController and showing same video with with comments in details. Actually I want to implement Swipe gesture action on commentViewController so user can swipe left right even on detail comment page which is commentViewController.

Code for CommentViewController:

import UIKit
import FloatingPanel

final class CommentsViewController: UIViewController, CommentsViewInput, FloatingPanelControllerDelegate {
    var post: IContentPost!

    private var output: CommentsViewOutput?
    private var fpc: FloatingPanelController!
    private var mute: Bool {
        return ASVideoPlayerController.sharedVideoPlayer.mute
    }
    private weak var contentVC: BottomSheetInputView?
    private let router = Router()

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        setup()
        swipeGesture()

    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        fpc.removePanelFromParent(animated: true)
    }

    @IBAction func dismissAction(_ sender: Any) {
        dismiss(animated: true, completion: nil)
    }

    func swipeGesture(){
        let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipes(_:)))
        let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipes(_:)))

        leftSwipe.direction = .left
        rightSwipe.direction = .right

        view.addGestureRecognizer(leftSwipe)
        view.addGestureRecognizer(rightSwipe)
    }

    @objc func handleSwipes(_ sender:UISwipeGestureRecognizer)
    {
        if (sender.direction == .left)
        {
           print("Swipe Left")

        }

        if (sender.direction == .right)
        {
           print("Swipe Right")

        }
    }

    private func setup() {
        let presenter = CommentsPresentationModel(view: self, post: post)
        self.output = presenter
        setupTableView()
        setupPanel()
        output?.getComments() { [weak self] comments in
            guard let comments = comments else { return }
            self?.contentVC?.updateComments(with: comments)
        }
    }

    private func setupPanel() {
        fpc = FloatingPanelController()
        fpc.delegate = self // Optional
        let contentVC = router.bottomVC()
        contentVC.delegate = self
        self.contentVC = contentVC
        fpc.set(contentViewController: contentVC)
        fpc.track(scrollView: contentVC.tableView)
        fpc.addPanel(toParent: self)
    }

    private func setupTableView() {
        tableView.delegate = self
        tableView.dataSource = self
        tableView?.registerReusableCell(FeedContentTableViewCell.self)
    }

}

extension CommentsViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell: FeedContentTableViewCell = tableView.dequeueReusableCell(for: indexPath)
        cell.delegate = self
        cell.setup(with: post, mute: mute, needTopInset: false)
        return cell
    }

}

extension CommentsViewController: FeedContentCellDelegate {
    func likePressed(id: String) {
        output?.postLiked(postId:id)
    }

    func commentPressed(post: IContentPost) {
        fpc.show(animated: true, completion: nil)
    }

    func sharePressed(id: String) {
        output?.postShared(postId: id)
        let text = "Hey! You gotta see that! 😂🤣 https://lols.link/share?\(id)"
        let textToShare = [text]
        let activityViewController = UIActivityViewController(activityItems: textToShare, applicationActivities: nil)
        activityViewController.popoverPresentationController?.sourceView = self.view
        self.present(activityViewController, animated: true, completion: nil)
    }

    func mutePressed() {
        ASVideoPlayerController.sharedVideoPlayer.mute = !mute
    }
}

extension CommentsViewController: BottomSheetDelegate {
    func didCloseComments() {
        fpc.hide(animated: true, completion: nil)
    }

    func didWriteComment(text: String) {

    }


}

Update:

Screenshot:


回答1:


  • Use 2 different functions to handle different swipe gestures
  • Add following in viewDidLoad()

var swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.swipedRight))

swipeRight.direction = UISwipeGestureRecognizerDirection.right

var swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(self.swipedLeft))
    swipeLeft.direction = UISwipeGestureRecognizerDirection.left

self.view.addGestureRecognizer(swipeLeft)

self.view.addGestureRecognizer(swipeRight)
  • create two objc functions swipedRight and swipedLeft

    @objc func swipedRight()
    

    { Add your record changing code here }

    @objc func swipedLeft()
    

    { Add your record changing code here }



来源:https://stackoverflow.com/questions/59116225/how-can-i-implement-swipe-left-and-right-to-change-data-views-in-swift-ios

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!