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

时间:2019-06-25 01:32:11

标签: swift view xib pass-data

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

我使用Swift 4.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()
}
}

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

weak var delegate: NumberCalculable?

您应该使用此textIntroduced += 1进行更改,而不必进行delegate?.addNumber(1)更改,其他IBAction方法也应进行更改。 第三,您需要在viewController类中遵守您的协议, keyboardView.delegate = self方法内的viewDidLoad()

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

希望这会有所帮助。