单击其他 class (Uiviewcontroller) 中的按钮更改 ContainerView 中的标签文本
Change Label text in a ContainerView on click of a button from other class (Uiviewcontroller)
我在主应用程序屏幕上 containerView
和 UILabel
变小了。我在主 UIViewController
上得到了 UIButton
。我想通过单击 UIViewController
中的按钮更改属于 containerView
class 的 label
的文本。
我尝试通过委托来实现,但由于某种原因我犯了一个错误(展开可选)...
我尝试使用 Protocol,ContView 中的 bud 方法 "addText" 不起作用((((((
class ViewController: UIViewController {
var delegate: DelegateProtocol?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func button(_ sender: Any) {
delegate?.addText(String2: "123")
}}
////////////////////////////////////////// /////////////////////////
protocol DelegateProtocol {
func addText(String2: String)
}
////////////////////////////////////////// ////////////////////////
class ContViewController: UIViewController, DelegateProtocol {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "con" {
let vc = segue.destination as! ViewController
vc.delegate = self
}
}
func addText(String2: String) {
label.text = String2
}
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
}
首先在你的视图控制器中创建一个全局变量
private var viewController: YourVC?
然后给您的容器视图 segue 一个标识符并执行以下操作
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "yourviewcontroller Segue identifiew" { //your container view segue identifier
viewController = segue.destination as? SelectedImageVC
}
}
现在您可以使用 viewController
访问容器视图控制器中的标签,例如
if let controller = viewController {
controller.yourlabel.text = "text you want"
}
我在主应用程序屏幕上 containerView
和 UILabel
变小了。我在主 UIViewController
上得到了 UIButton
。我想通过单击 UIViewController
中的按钮更改属于 containerView
class 的 label
的文本。
我尝试通过委托来实现,但由于某种原因我犯了一个错误(展开可选)...
我尝试使用 Protocol,ContView 中的 bud 方法 "addText" 不起作用((((((
class ViewController: UIViewController {
var delegate: DelegateProtocol?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func button(_ sender: Any) {
delegate?.addText(String2: "123")
}}
////////////////////////////////////////// /////////////////////////
protocol DelegateProtocol {
func addText(String2: String)
}
////////////////////////////////////////// ////////////////////////
class ContViewController: UIViewController, DelegateProtocol {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "con" {
let vc = segue.destination as! ViewController
vc.delegate = self
}
}
func addText(String2: String) {
label.text = String2
}
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
}
首先在你的视图控制器中创建一个全局变量
private var viewController: YourVC?
然后给您的容器视图 segue 一个标识符并执行以下操作
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "yourviewcontroller Segue identifiew" { //your container view segue identifier
viewController = segue.destination as? SelectedImageVC
}
}
现在您可以使用 viewController
访问容器视图控制器中的标签,例如
if let controller = viewController {
controller.yourlabel.text = "text you want"
}