我应该如何将数据从 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 = self
在 viewDidLoad()
方法中。
extension ViewController: NumberCalculable {
func addNumber(_ number: Int) {
// do whatever you want
}
}
希望对您有所帮助。
我有一个 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 = self
在 viewDidLoad()
方法中。
extension ViewController: NumberCalculable {
func addNumber(_ number: Int) {
// do whatever you want
}
}
希望对您有所帮助。