У меня проблема с делегированием. Я относительно новичок в концепции, но концептуально я понимаю, и это важно. У меня просто проблемы с его использованием. Я не могу передать данные из одного класса в другой. Я знаю, что существуют примеры делегирования переполнения стека, но они не совсем улавливают мое недоразумение. Я получаю использование протоколов, делегирование и вызов его в классе. Я полагаю, что есть лишь небольшой нюанс, который мне не хватает ... И это видно по отсутствию функциональности в моем коде
//my protocol:
protocol StingHolder {
func StringPasser(ThisText text: String)
}
Создание отношения протокола делегата, размещение данных для передачи и отклонение представленияКонтроллер
// my classes for placing data to be passed
class changeLabel: UIViewController,UITextFieldDelegate{
var Delegate: StingHolder?
@IBOutlet weak var TexrBeingPassed: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
TexrBeingPassed.delegate = self
// Do any additional setup after loading the view.
}
@IBAction func ButtonPassingDataOtherView(_ sender: Any) {
Delegate?.StringPasser(ThisText: TexrBeingPassed.text!)
dismiss(animated: true, completion: nil)
}
}
Создает экземпляр класса метки изменения и его делегата и устанавливает себя в качестве делегата * предположительно изменяет метку, но не
///class to receive data
class ViewController: UIViewController{
@IBOutlet weak var LableName: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
var lableChange = changeLabel()
lableChange.Delegate = self
// Do any additional setup after loading the view.
}
@IBAction func EditController(_ sender: Any) {
var storyBoard = UIStoryboard(name: "Test", bundle: nil)
var ViewController = storyBoard.instantiateViewController(withIdentifier: "TestView")
self.present(ViewController, animated: true, completion: nil)
}
}
наследуетпротокол и сообщает ему, чтобы он изменил метку на тот, что делегат класса changelabel проходит
// extension view controller inheriting the protocol
extension ViewController : StingHolder{
func StringPasser(ThisText text: String){
print("Delegate is working")
LableName.text = text
///
}
}
Я хочу, чтобы один контроллер представления редактировал текстовую метку другого контроллера представления