当我按下UIView类中的按钮时,我想将导航控制器触发到其他屏幕。我怎样才能做到这一点?

//在其中创建按钮Iboutlet的UIView类的代码

import UIKit

protocol ButtonDelegate: class  {
    func buttonTapped()
}

class SlidesVC: UIView {

  var delegate: ButtonDelegate?

   @IBAction func onClickFinish(_ sender: UIButton) {

   delegate?.buttonTapped()

   }

   @IBOutlet weak var imgProfile: UIImageView!

    }

   //ViewController Class code in Which Button Protocol will be entertained

  class SwipingMenuVC: BaseVC, UIScrollViewDelegate {
         var  slidesVC = SlidesVC()

             override func viewDidLoad() {
                    super.viewDidLoad()

                    slidesVC = SlidesVC()
                    // add as subview, setup constraints etc
                    slidesVC.delegate = self

        }

extension BaseVC: ButtonDelegate {
  func buttonTapped() {

 self.navigationController?.pushViewController(SettingsVC.settingsVC(),
            animated: true)

   }
   }

最佳答案

一个更简单的方法是使用typealias。您必须在2个地方编写代码。 1.您的viewClass和2.在您的View Controller中。

在SlidesView类中,如果需要,请添加类型别名并定义参数类型,否则将其留空。

class SlidesView: UIView {
typealias OnTapInviteContact = () -> Void
var onTapinviteContact: OnTapInviteContact?

    @IBAction func buttonWasTapped(_ sender: UIButton) {
    if self.onTapinviteContact != nil {
      self.onTapinviteContact()
    }

  }
}

  class SwipingMenuVC: BaseVC, UIScrollViewDelegate {
             override func viewDidLoad() {
                    super.viewDidLoad()

                    let slidesView = SlidesView()
                    slidesView.onTapinviteContact = { () in
                    // do whatever you want to do on button tap
            }

        }

10-08 05:25