我正在开发一个应用程序,需要在视图和containerView之间传递数据。我需要从这两个视图发送和接收数据。
让我更好地解释一下:
我可以通过协议更改标签主文件(触摸容器按钮),但我无法更改标签容器(触摸主文件按钮)。发生的情况是主文件通过跟随与容器连接。但没有跟随容器链接到主文件。
我试着加上但segue到,但它的工作。
主视图控制器:
import UIKit
protocol MasterToContainer {
func changeLabel(text:String)
}
class Master: UIViewController, ContainerToMaster {
@IBOutlet var containerView: UIView!
var masterToContainer:MasterToContainer?
@IBOutlet var labelMaster: UILabel!
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "containerViewSegue" {
let view = segue.destinationViewController as? Container
view!.containerToMaster = self
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func button_Container(sender: AnyObject) {
masterToContainer?.changeLabel("Nice! It's work!")
}
func changeLabel(text: String) {
labelMaster.text = text
}
}
容器视图控制器:
import UIKit
protocol ContainerToMaster {
func changeLabel(text:String)
}
class Container: UIViewController, MasterToContainer {
var containerToMaster:ContainerToMaster?
@IBOutlet var labelContainer: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func button_Master(sender: AnyObject) {
containerToMaster?.changeLabel("Amazing! It's work!")
}
func changeLabel(text: String) {
labelContainer.text = text
}
}
有人能帮帮我吗?
3条答案
按热度按时间6kkfgxo01#
您需要做的就是在主视图控制器中保留对
Container
的引用。也就是说,你应该在
Master
中添加一个示例变量,它将包含对视图控制器的引用,而不仅仅是视图。因此,主视图控制器的开头将类似于:
然后在按钮函数中,使用刚才添加的变量更改标签。
示例:
这意味着你也可以摆脱你的
MasterToContainer
协议。我测试了这段代码,所以我知道它能工作,但不幸的是,我是一个Objective-C开发人员,对Swift中的最佳实践一无所知。所以我不知道这是不是最好的方法,但它肯定能工作。
编辑:
下面是我测试过的具体代码:
Master.swift:
Container.swift:
jhkqcmku2#
我用这个代码解决了它
从视图控制器-〉容器视图控制器发送数据
在容器视图控制器中
从容器视图控制器-〉视图控制器发送数据
和视图控制器中
我希望这能帮助到一些人。
kmbjn2e33#
您可以使用此扩展访问容器子项
因此您可以在视图控制器中执行类似操作