我有一个xib视图,该视图包含一个计算器按钮,之所以这样做是因为我需要为我的应用程序自定义键盘,我的应用程序有一些需要此键盘的视图 问题是,如何将数据从视图发送到视图控制器? 在我的视图控制器中,我只有一个文本字段和一个带有xib自定义类的视图
我使用Swift 4.2
这是我来自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()
}
}
在我的视图控制器中,我只有一个文本字段和具有自定义类的视图
我想按任何按钮视图,结果应该写在文本字段中。
答案 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
}
}
希望这会有所帮助。