简体   繁体   English

如何实现左右滑动以在 swift IOS 中更改数据/视图?

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

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.我想实现左右滑动手势功能以在 swift 5 中更改数据视图。我有两个 viewControllers - FeedsController ,其中包含 tableview 和其中所有视频的列表。 In FeedsController if I click on comment button it moves to commentViewController and showing same video with with comments in details.FeedsController ,如果我单击评论按钮,它会移动到commentViewController并显示带有详细评论的相同视频。 Actually I want to implement Swipe gesture action on commentViewController so user can swipe left right even on detail comment page which is commentViewController .实际上,我想在commentViewController上实现滑动手势操作,这样用户即使在commentViewController的详细评论页面上也可以向左向右滑动。

Code for CommentViewController: 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:截屏:

FeedViewController

评论视图控制器

  • Use 2 different functions to handle different swipe gestures使用 2 个不同的函数来处理不同的滑动手势
  • Add following in viewDidLoad()viewDidLoad()中添加以下内容

up to Swift 4.0高达 Swift 4.0

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)

Swift 4.2 onwards :斯威夫特 4.2 以后
'UISwipeGestureRecognizerDirection' has been renamed to 'UISwipeGestureRecognizer.Direction' “UISwipeGestureRecognizerDirection”已重命名为“UISwipeGestureRecognizer.Direction”

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

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

self.view.addGestureRecognizer(swipeLeft)

self.view.addGestureRecognizer(swipeRight)
  • create two objc functions swipedRight and swipedLeft创建两个 objc 函数swipedRightswipedLeft
@objc func swipedRight()
{
    // Add your record changing code here
}

@objc func swipedLeft()
{
    // Add your record changing code here
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM