我应该如何将数据从 xib 发送到 viewcontroller?

how I should send data from xib to viewcontroller?

我有一个 xib 视图,这个视图包含一个计算器按钮,我这样做是因为我的应用程序需要一个自定义键盘,我的应用程序有一些视图需要这个键盘 问题是,我如何将数据从视图发送到我的视图控制器? 在我的视图控制器中,我只有一个文本字段和一个带有 xib 自定义视图 class

我用swift4.2

custom view and textflied

这是我的 xib 代码

import UIKit

class keyboardView: UIView {


@IBOutlet var viewKeyboard: UIView!

var textIntroduced = ""

override init(frame: CGRect) { // for using CustomView in code
    super.init(frame: frame)
    custom()
}

required init?(coder aDecoder: NSCoder)
{
    super.init(coder: aDecoder)
    custom()
}

private func custom()
{
    Bundle.main.loadNibNamed("keyboard", owner: self, options: nil)

    viewKeyboard.frame = self.bounds
    viewKeyboard.autoresizingMask = [.flexibleHeight,.flexibleWidth]
    for view in viewKeyboard.subviews
    {
        view.isExclusiveTouch = true
    }
    addSubview(viewKeyboard)
}

@IBAction func addOne(_ sender: Any) {
    textIntroduced += "1"
}
@IBAction func addTwo(_ sender: Any) {
    textIntroduced += "2"
}
@IBAction func addThree(_ sender: Any) {
    textIntroduced += "3"
}
@IBAction func addFour(_ sender: Any) {
    textIntroduced += "4"
}
@IBAction func addFive(_ sender: Any) {
    textIntroduced += "5"
}
@IBAction func addSix(_ sender: Any) {
    textIntroduced += "6"
}
@IBAction func addSeven(_ sender: Any) {
    textIntroduced += "7"
}
@IBAction func addEight(_ sender: Any) {
    textIntroduced += "8"
}
@IBAction func addNine(_ sender: Any) {
    textIntroduced += "9"
}
@IBAction func addZero(_ sender: Any) {
    textIntroduced += "0"
    print(textIntroduced)
}
@IBAction func removeNumber(_ sender: Any) {
    textIntroduced.removeLast()
}
}

在我的视图控制器中,我只有一个文本字段和自定义视图 class

我想按下任何按钮视图,结果应写在文本字段中。

您可以使用协议来观察您的xib 中的数据变化。首先,您需要创建一个这样的协议。

protocol NumberCalculable: class {
    func addNumber(_ number: Int)
}

然后,在您的 viewKeyboard 插座下方的 xib 文件中,您需要为您的协议创建一个委托。

weak var delegate: NumberCalculable?

而不是做 textIntroduced += 1 你应该改变这个 delegate?.addNumber(1) 和其他 IBAction 方法一样。 第三,您需要在 viewController class 中遵守您的协议 keyboardView.delegate = selfviewDidLoad() 方法中。

extension ViewController: NumberCalculable {
func addNumber(_ number: Int) {
// do whatever you want
}
}

希望对您有所帮助。