Ответ 1
1. Если контроллер вида, содержащий текстовое поле, может вызвать (с помощью segue) контроллер представления, содержащий метку...
Добавьте новый новый файл Cocoa Touch class в свой проект, назовите его FirstViewController
и установите в нем следующий код:
import UIKit
class FirstViewController: UIViewController {
@IBOutlet weak var textField: UITextField! // FIXME: link this to the UITextField in the Storyboard!!!
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let controller = segue.destinationViewController as! SecondViewController
controller.text = textField.text
}
}
Добавьте новый новый Cocoa файл класса Touch в свой проект, назовите его SecondViewController
и установите в нем следующий код:
import UIKit
class SecondViewController: UIViewController {
var text: String?
@IBOutlet weak var label: UILabel! // FIXME: link this to the UILabel in the Storyboard!!!
override func viewDidLoad() {
super.viewDidLoad()
label.text = text
}
}
В раскадровке вставьте первый контроллер представления в UINavigationController
. Свяжите первый контроллер представления со вторым с помощью UIButton
или UIBarButtonItem
. Задайте имя первого контроллера представления FirstViewController
и имя второго контроллера просмотра SecondViewController
. Создайте UITextField
в первом контроллере представления. Создайте UILabel
во втором контроллере представления. Свяжите текстовое поле и метку с соответствующими объявлениями в FirstViewController
и SecondViewController
.
2. Если контроллер вида, содержащий метку, может вызвать (с помощью segue) контроллер вида, содержащий текстовое поле...
Здесь это идеальный протокол/делегирование. Вы можете найти много вещей в StackOverflow, связанных с этим. Однако здесь приведен пример.
Добавьте новый новый файл Cocoa Touch class в свой проект, назовите его FirstViewController
и установите в нем следующий код:
import UIKit
class FirstViewController: UIViewController, DetailsDelegate {
@IBOutlet weak var label: UILabel! // FIXME: link this to the UILabel in the Storyboard
func updateLabel(withString string: String?) {
label.text = string
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let controller = segue.destinationViewController as! SecondViewController
controller.delegate = self
}
}
Добавьте в проект новый файл класса Cocoa/Cocoa Touch, назовите его SecondViewController
и установите в нем следующий код:
import UIKit
protocol DetailsDelegate: class {
func updateLabel(withString string: String?)
}
class SecondViewController: UIViewController {
weak var delegate: DetailsDelegate?
@IBOutlet weak var textField: UITextField! // FIXME: link this to the UITextField in the Storyboard
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
delegate?.updateLabel(withString: textField.text)
}
}
В раскадровке вставьте первый контроллер представления в UINavigationController
. Свяжите первый контроллер представления со вторым с помощью UIButton
или UIBarButtonItem
. Задайте имя первого контроллера представления FirstViewController
и имя второго контроллера просмотра SecondViewController
. Создайте UILabel
в первом контроллере представления. Создайте UITextField
во втором контроллере представления. Свяжите текстовое поле и метку с соответствующими объявлениями в FirstViewController
и SecondViewController
.