我正在使用swift编写的iOS应用程序的设置视图控制器屏幕.我正在使用导航控制器来运行主设置表视图,该视图显示标题为"输入方法"的单元格.当前方法列在单元格的右侧.他们可以单击单元格转到下一个视图控制器,在那里他们可以选择他们喜欢的输入法.
从这里开始,有两个部分.第一种是选择的输入法(触摸屏或操纵杆).第二部分是关于该人是否是左撇子或右撇子的操纵杆.当他们选择一个盒子时,我不想让vc放松,因为他们也可以在另一个盒子中选择一个.
我的问题:如何从子控制器更新父控制器中的文本字段.
我对可选解决方案的问题:
let parentVC: UIViewController = (self.navigationController?.parentViewController)!
parentVC.inputMethod.text? = cellSelected // This doesn't work because it cannot find the label inputMethod.
Run Code Online (Sandbox Code Playgroud)
viewDidLoad()将导致延迟,并且用户在更改之前会看到旧方法.
当有人点击导航控制器左上角的后退按钮时,我无法找到如何运行segue,因为导航控制器控制了segue.
jav*_*azo 47
即使您确定哪个类表示,也不应该转换父视图控制器.我会用协议做的:
在子控制器中添加如下协议:
protocol ChildNameDelegate {
func dataChanged(str: String)
}
class ChildClass {
weak var delegate: ChildNameDelegate?
func whereTheChangesAreMade(data: String) {
delegate?.dataChanged(data)
}
}
Run Code Online (Sandbox Code Playgroud)
而在父母:
class ParentClass: ChildNameDelegate {
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
guard let segueId = segue.identifier else { return }
switch segueId {
case "childSegue":
let destVC = segue.destinationViewController as! ChildClass
destVC.delegate = self
break
default:
break
}
}
// Child Delegate
func dataChanged(str: String) {
// Do whatever you need with the data
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18641 次 |
最近记录: |