Передача данных между пользовательским представлением и контроллером представления

У меня есть пользовательский UIControl (TestControl), и я хочу передать простую строку метке в главном представлении. UIControl (TestControl) находится внутри UIView (CustomView), который был размещен на раскадровке с использованием представления, которое имеет настраиваемый класс (CustomView).

Какая простая реализация позаботится об этом?

Я заметил, что CustomView вызывается перед viewDidLoad () в ViewController.

ViewController.swift

import UIKit

@IBOutlet var someLabel: UILabel!

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

} 

TestControl.swift

import UIKit

class TestControl: UIControl {

    // Initializer
    override init(frame: CGRect) {
        super.init(frame: frame)

        self.backgroundColor = UIColor.blackColor()

    //this is where it would be good if a string could be passed to a label

    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

CustomView.swift

import UIKit

@IBDesignable class CustomView: UIView{

    #if TARGET_INTERFACE_BUILDER
    override func willMoveToSuperview(newSuperview: UIView?) {

      let testing: TestControl = TestControl(frame: self.bounds)
      self.addSubview(testing)

    }

    #else
    override func awakeFromNib() {

        super.awakeFromNib()

        let testing: TestControl = TestControl(frame: self.bounds)
        self.addSubview(testing)

    }
    #endif
}

введите здесь описание изображения


person Phil    schedule 11.10.2015    source источник


Ответы (1)


Поскольку у вас есть элемент управления в раскадровке, все, что вам нужно сделать, это подключить обработчик событий didChange к IBAction в вашем контроллере представления. Затем это может интерпретировать это действие, чтобы сделать то, что вы хотите.

person Abizern    schedule 11.10.2015
comment
Возможно ли это в приведенном выше примере? Если да, то как? - person Phil; 11.10.2015
comment
Я не вижу реализации sendActionsForControlEvents: в вашем элементе управления - person Abizern; 11.10.2015