Ios 使用self.disclose在视图控制器之间更改viewcontroller中的现有数据
我有一个视图控制器。它以Ios 使用self.disclose在视图控制器之间更改viewcontroller中的现有数据,ios,swift,segue,Ios,Swift,Segue,我有一个视图控制器。它以模式呈现全屏视图控制器的序列。它将图像数据列表传递给全屏视图控制器。此列表具有与之相关的属性,如like、views等。我已经查看了其他答案,但相信它们将完全替换当前数组,我认为这将完全重新加载第一个视图中兑现的每一位数据。所以我只想修改需要修改的数据 Class FirstController { var photosList: [customStruct] = [Photo1,Photo2,Photo3] override func prepare(
模式呈现全屏视图控制器的序列。它将图像数据列表传递给全屏视图控制器。此列表具有与之相关的属性,如like、views等。我已经查看了其他答案,但相信它们将完全替换当前数组,我认为这将完全重新加载第一个视图中兑现的每一位数据。所以我只想修改需要修改的数据
Class FirstController {
var photosList: [customStruct] = [Photo1,Photo2,Photo3]
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "photofull" {
if let fullImaageViewController = segue.destination as? ImageDetailViewController {
fullImageViewController.photosList = photosList
}
}
}
在这里,数据通过模态视图控制器向前传递。在完整的imageViewcontroller中,可以更改数据,例如<代码>[photosList[1]。imageLikes=photosList[1]。imageLikes+1
唯一的问题是我只能在fullImageViewController上更改此数据,而不能在FirstController上更改。是否有办法在前一个控制器上访问此数据
我想做一些类似于
FirstController()[photosList[1]。imageLikes=FirstController.photosList[1]。imageLikes+1
的事情,但它不起作用。在FullImageViewController
上创建一个协议。并将该协议(委托)分配给FirstViewController
然后调用fullimageviewcontroller
中的协议函数,并提供所需信息,以便在FirstViewController
中进行所需更新
想想mail composer
delegate
的功能。好吧,这里需要的是一个简单的委派协议,用于将数据从一个视图控制器
传输到另一个视图控制器
以下是如何使用协议的步骤
在ViewController2
或fullimageviewcontroller
中执行以下步骤
在类声明上方声明您的委托
protocol MyDelegate:class { // declare your protocol a class protocol
func sendDataBack(value: Photo)
}
在类中
声明您的委托的变量
weak var myDelegateObj: MyDelegate? // always declare a weak delegate so that it cannot capture the memory of the object
当您解除VC
时,只需用line调用代理即可
myDelegateObj?.sendDataBack(value: Photo)
现在转到您的FirstViewController
,如果未在viewdidload
中或在显示视图时声明FirstViewController Obj
,请转到您声明该对象的行。
然后执行以下操作
let vc = FirstViewController()
vc.myDelegateObj = self
并在FirstViewController
在FirstViewController中:
class FirstViewController:UIViewController,MyDelegate
weak var myDelegateObj: MyDelegate? // always declare a weak delegate so that it cannot capture the memory of the object
并实现MyDelegate方法
然后在开始之前,我使用
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "photofull" {
if let fullImaageViewController = segue.destination as? ViewController2 {
fullImaageViewController.myDelegateObj = self
}
}
}
希望这能有所帮助。如果答案对您有帮助,请务必接受,提前感谢:)与其这样做,不如这样做fullimageviewcontroller.myDelegateObj=self as!MyDelegate
,只需通过这样做class ViewController:UIViewController,MyDelegate
,使您的视图控制器符合MyDelegate
,然后只需执行fullimageviewcontroller.myDelegateObj=self
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "photofull" {
if let fullImaageViewController = segue.destination as? ViewController2 {
fullImaageViewController.myDelegateObj = self
}
}
}