繁体   English   中英

我如何从 UIView 转到 UIViewController 故事板

[英]How can i goto UIViewController storyboard from UIView

界面视图

import UIKit

class TridHeaderBar: UIView {


    @IBAction func btnClick(_ sender: Any) {

    }

}

我想从这个 UIView 去一个 ViewController。 我试过下面的代码

let ctrl = FirstViewController()
self.present(ctrl, animated: true, completion: nil)

您可以使用各种方法来实现您的目标,其中一种(也是最好的一种)是使用delegate

所以首先你需要定义你的委托:

protocol MYViewDelegate: class {
  func buttonTap(sender: MYView)
}

那么在你看来:

class MyView: UIView {
    weak var delegate: MYViewDelegate?

    @IBAction func btnClick(_ sender: Any) {
        delegate?.buttonTap(sender: self)
    }
}

现在,您将自定义视图的父视图控制器设置为自定义视图的委托,工作就完成了。

class MYParentViewController: UIViewController {
    @IBOutlet var myCustomView: MyView!

    override func viewDidLoad() {
       super.viewDidLoad()
       myCustomView.delegate = self
    }
}

extension MYParentViewController: MYViewDelegate {
    func buttonTapped(sender: MYView) {
       let ctrl = FirstViewController()
       self.present(ctrl, animated: true, completion: nil)
    }
}

您还可以使用回调函数在您的 parrentViewController 上获取点击操作:

1)在您的视图中声明回调函数:

var callback:(() -> Void)?

您还可以从您的视图中传递任何值,例如 (var callback:((String) -> Void)?)。 我在这里拿绳子,你可以随意传递。

并在按钮操作中像这样调用这个函数(回调?(“我在这里传递字符串”))

2) 在你的 IBAction 按钮中调用这个函数:

@IBAction func btnClick(_ sender: Any) {
     callback?()
}

3) 在你的 parrentViewControler 中编写回调函数闭包:

class ParentViewController: UIViewController {
    @IBOutlet var myCustomView: MyView!

    override func viewDidLoad() {
       super.viewDidLoad()
       viewTapped()
    }

   func viewTapped() {
      myCustomView.callback = { [unowned self] 
          //you will get button tap action here
          let ctrl = FirstViewController()
          self.present(ctrl, animated: true, completion: nil)
      }
   }
}

暂无
暂无

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

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