如何使用协议发送数据并使用 IBAction 进行委托(单击按钮)
How to send data with Protocols and Delegate with IBAction (Button click)
你好,我最近在课程中遇到了协议和代表(iOS 开发人员在这里生产)。
我试图在我的简单应用程序中应用它,它基本上什么都不做,但我想将数据从一个 VC 传递到另一个。
更具体地说:
ViewControllerOne 有按钮并设置 segue 以转到我的 ViewControllerTwo,ViewControllerTWo 也有按钮,我现在只想在单击 ViewControllerTwo 上的按钮时打印一些文本。
代码如下:
接收器
class ViewControllerOne: UIViewController, DataDelegate {
var vcTwo = ViewControllerTwo()
override func viewDidLoad() {
super.viewDidLoad()
vcTwo.delegate = self
}
func printThisNumber(type: Int){
print("This is a test of delegate with number: \(type)")
}
已定义协议的发件人
protocol DataDelegate {
func printThisNumber(type: Int)
}
class ViewControllerTwo: UIViewController {
var delegate: DataDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func myButtonPressed(_ sender: UIButton) {
delegate?.printThisNumber(type: 1)
}
}
它什么也没发送,我试图用打印语句解决它,显然(当按钮被点击时),但即使我在 viewDidLoad 中打印委托,它也显示为 nil。
当我尝试 Whosebug 的另一种方法时,例如将委托声明为弱变量,Xcode 甚至不允许我这样做。
感谢愿意花 his/her 时间解决此问题并提出任何有助于我理解或解决问题的人。
如果能解决这个问题,我未来的打算是在 VCTwo 上获取一些数据并使用该数据进行更新,例如VC一个上的标签文本。
谢谢
最好的祝福
彼得
由于您使用 segue 导航到 ViewControllerTwo
,因此 ViewControllerOne
中的 vcTwo
实例将不是推送的视图控制器实例。您必须覆盖 ViewControllerOne
中的 prepare(for segue
才能访问 ViewControllerTwo
的实例,然后设置委托。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vcTwo = segue.destination as? ViewControllerTwo {
vcTwo.delegate = self
}
}
你好,我最近在课程中遇到了协议和代表(iOS 开发人员在这里生产)。
我试图在我的简单应用程序中应用它,它基本上什么都不做,但我想将数据从一个 VC 传递到另一个。
更具体地说: ViewControllerOne 有按钮并设置 segue 以转到我的 ViewControllerTwo,ViewControllerTWo 也有按钮,我现在只想在单击 ViewControllerTwo 上的按钮时打印一些文本。
代码如下:
接收器
class ViewControllerOne: UIViewController, DataDelegate {
var vcTwo = ViewControllerTwo()
override func viewDidLoad() {
super.viewDidLoad()
vcTwo.delegate = self
}
func printThisNumber(type: Int){
print("This is a test of delegate with number: \(type)")
}
已定义协议的发件人
protocol DataDelegate {
func printThisNumber(type: Int)
}
class ViewControllerTwo: UIViewController {
var delegate: DataDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func myButtonPressed(_ sender: UIButton) {
delegate?.printThisNumber(type: 1)
}
}
它什么也没发送,我试图用打印语句解决它,显然(当按钮被点击时),但即使我在 viewDidLoad 中打印委托,它也显示为 nil。
当我尝试 Whosebug 的另一种方法时,例如将委托声明为弱变量,Xcode 甚至不允许我这样做。
感谢愿意花 his/her 时间解决此问题并提出任何有助于我理解或解决问题的人。
如果能解决这个问题,我未来的打算是在 VCTwo 上获取一些数据并使用该数据进行更新,例如VC一个上的标签文本。
谢谢 最好的祝福 彼得
由于您使用 segue 导航到 ViewControllerTwo
,因此 ViewControllerOne
中的 vcTwo
实例将不是推送的视图控制器实例。您必须覆盖 ViewControllerOne
中的 prepare(for segue
才能访问 ViewControllerTwo
的实例,然后设置委托。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vcTwo = segue.destination as? ViewControllerTwo {
vcTwo.delegate = self
}
}