【发布时间】:2018-10-11 01:14:06
【问题描述】:
为什么这个委托模式不起作用?在 DelegateViewController 中选择一个按钮后,我想在第二个 ViewController(标签出口)中显示 name 属性
我做了以下步骤:
在“Boss”ViewController 中创建协议 --> DelegateViewController
将我的功能分配给这个协议 --> selectedButton
- 在 DelegateViewController 中创建 selectionButtonDelegate 变量
- 在 ViewController 中,我创建了一个新的 DelegateViewController() 实例
- 在 viewDidLoad 中,我随后将实例的委托分配为等于 self
- 我创建了一个带有传递参数功能的扩展
DelegateViewController:
import UIKit
protocol SelectionDelegate {
func selectedButton(name: String)
}
class DelegateViewController: UIViewController {
var selectionButtonDelegate: SelectionDelegate!
@IBAction func bayernButton(_ sender: UIButton) {
selectionButtonDelegate.selectedButton(name: "Bayern")
}
@IBAction func dortmundButton(_ sender: UIButton) {
selectionButtonDelegate.selectedButton(name: "Dortmund")
}
}
视图控制器:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var selectedButton: UILabel!
let model = DelegateViewController()
override func viewDidLoad() {
super.viewDidLoad()
model.selectionButtonDelegate = self
}
}
extension ViewController: SelectionDelegate {
func selectedButton(name: String) {
selectedButton.text = name
}
}
【问题讨论】:
-
您从不显示
model中的ViewController,那么如何点击任何按钮? -
委托变量应该是可选类型。哪个控制器在堆栈中排在第一位?委托控制器还是视图控制器?
-
DelegateViewController 是初始视图控制器,在堆栈中排在第一位。
-
@rmaddy 我的按钮在堆栈中排在第一位,你能解释一下为什么我应该从我的 ViewController 显示模型吗?以及如何显示模型?
-
@iOSFats 如果 DelegateViewController 是初始视图控制器,那么您将得到 selectionButtonDelegate = nil ,视图控制器应该在堆栈中排在第一位,并且只会分配您的委托
标签: ios swift delegation