[英]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.