也许通过方法或闭包?
我创建了我的超类/父视图控制器的子类视图控制器,并将带有占位符文本的标签放置在该子类视图控制器中。
我想将标签的值设置为来自超类/父视图控制器的空白字符串,或者特别是从导致子类视图控制器出现的IBAction函数设置。
这是代码,首先是父类,然后是子类...
'''
class ViewController: UIViewController {
@IBAction func leavingView(){
self.EntryViewController.entryDateLabel.text = ""
self.EntryViewController.entryLabel.text = ""
self.dismiss(animated: true, completion: nil)
}
''' 然后从子类... '''
class EntryViewController: ViewController {
@IBOutlet var entryDateLabel: UILabel!
@IBOutlet var entryLabel: UILabel!
}
'''
答案 0 :(得分:0)
由于您的要求不太明确,因此我为您创建了一个演示,并在该演示中将子级ContainerViewController
添加到父级ViewController
中,您可以从该父级视图控制器中更改{{1 }}文字,当您点击父项UILabel
的{{1}}时,代码将用于UIButton
ViewController
和ViewController
代码将是:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func btnFromParentViewTapped(_ sender: Any) {
//Here get the child of your parent view controller
if let containerView = self.children[0] as? ContainerViewController {
containerView.lblContainer.text = ""
}
}
}
无需在此处添加太多内容,因为您是从父视图访问它的。
您的结果将是:
如您所见,当我单击标题为ContainerViewController
的按钮时,class ContainerViewController: UIViewController {
@IBOutlet weak var lblContainer: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
中的标签文本设置为空字符串。
有关更多信息,请查看THIS演示项目。
答案 1 :(得分:0)
我想出了两种解决此问题的方法,而没有让父视图控制器知道其子类。
在第一个示例中,父级自行设置了子级侦听的属性(通过didSet
方法,然后相应地更新其视图。但是,由于entryDate
和entry
字符串字段本身是无用的,在父级中几乎是多余的。
class ParentViewController: UIViewController {
var entryDate: String?
var entry: String?
@IBAction func leavingView(){
self.entryDate = ""
self.entry = ""
self.dismiss(animated: true, completion: nil)
}
}
class ChildViewController: ParentViewController {
@IBOutlet var entryDateLabel: UILabel!
@IBOutlet var entryLabel: UILabel!
override var entryDate: String? {
didSet {
guard isViewLoaded else {
return
}
entryDateLabel.text = entryDate
}
}
override var entry: String? {
didSet {
guard isViewLoaded else {
return
}
entryLabel.text = entry
}
}
}
我认为,第二种解决方案更清晰,并且使实现细节更加独立,因为您正在使用指令或事件来通知子视图控制器。
class ParentViewController: UIViewController {
@IBAction func leavingView(){
self.dismiss(animated: true, completion: didLeaveView)
}
func didLeaveView() { }
}
class ChildViewController: ParentViewController {
@IBOutlet var entryDateLabel: UILabel!
@IBOutlet var entryLabel: UILabel!
override func didLeaveView() {
entryDateLabel.text = ""
entryLabel.text = ""
}
}