簡體   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