【发布时间】:2020-02-02 04:43:34
【问题描述】:
我遇到了委派问题。我对这个概念比较陌生,但从概念上讲,我明白了,它很重要。我只是在使用它时遇到了麻烦。我似乎无法将数据从一个类传递到另一个类。我知道在堆栈溢出方面存在现有的委托示例,但它们并没有完全理解我的误解。我得到了协议的使用,委托,并在一个类中调用它。我相信我只是缺少一些细微的差别......而且它在我的代码中缺乏功能是可见的
//my protocol:
protocol StingHolder {
func StringPasser(ThisText text: String)
}
创建委托协议关系,放置要传递的数据,然后关闭视图控制器
// my classes for placing data to be passed
class changeLabel: UIViewController,UITextFieldDelegate{
var Delegate: StingHolder?
@IBOutlet weak var TexrBeingPassed: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
TexrBeingPassed.delegate = self
// Do any additional setup after loading the view.
}
@IBAction func ButtonPassingDataOtherView(_ sender: Any) {
Delegate?.StringPasser(ThisText: TexrBeingPassed.text!)
dismiss(animated: true, completion: nil)
}
}
创建一个更改标签类及其委托的实例,并将自己设置为委托 *据说会更改标签,但它没有
///class to receive data
class ViewController: UIViewController{
@IBOutlet weak var LableName: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
var lableChange = changeLabel()
lableChange.Delegate = self
// Do any additional setup after loading the view.
}
@IBAction func EditController(_ sender: Any) {
var storyBoard = UIStoryboard(name: "Test", bundle: nil)
var ViewController = storyBoard.instantiateViewController(withIdentifier: "TestView")
self.present(ViewController, animated: true, completion: nil)
}
}
继承协议并告诉它将标签更改为 changelabel 类委托传递的任何内容
// extension view controller inheriting the protocol
extension ViewController : StingHolder{
func StringPasser(ThisText text: String){
print("Delegate is working")
LableName.text = text
///
}
}
我希望一个视图控制器编辑另一个视图控制器的文本标签
【问题讨论】:
-
故事板中的VC是否是ID为
TestView的changeView类型的VC? -
是的,我没有给出相同的名字,对于任何混淆,我深表歉意
标签: swift protocols delegation data-sharing