как я должен отправить данные из Xib в viewcontroller? - PullRequest
0 голосов
/ 25 июня 2019

у меня есть представление, которое представляет собой 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()
}
}

в моем контроллере вида у меня есть только текстовое поле и вид с пользовательским классом

Я хочу нажать любую кнопку, и результат должен быть записан в текстовом поле.

1 Ответ

0 голосов
/ 25 июня 2019

Вы можете использовать протокол для наблюдения за изменениями данных в вашем xib. Прежде всего вам нужно создать такой протокол.

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

Затем внутри вашего xib-файла под вашей viewKeyboard розеткой вам нужно создать делегата для вашего протокола.

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
}
}

Надеюсь, это поможет.

...