【问题标题】:how I should send data from xib to viewcontroller?我应该如何将数据从 xib 发送到 viewcontroller?
【发布时间】:2019-11-06 19:12:24
【问题描述】:

我有一个 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()
}
}

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

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

【问题讨论】:

  • 使用观察者模式,所以视图控制器并监听来自视图的变化
  • 通过IB在视图控制器上创建一个UIView对象。建立一个 IBOutlet 连接。更改视图对象的类名。

标签: swift view xib pass-data


【解决方案1】:

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

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

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

weak var delegate: NumberCalculable?

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

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

希望这会有所帮助。

【讨论】:

  • 好朋友,我一直在尝试,但没有成功,您的解决方案对我有帮助,非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 2012-07-23
  • 2019-08-12
  • 2016-05-13
  • 1970-01-01
相关资源
最近更新 更多