最近我一直在开发一个新应用程序,但我正在努力在 View Controller 之间传递数据。
我使用一个 View Controller ,它包含一个容器 View ,我在其中使用谷歌地图。正如你们中的一些人所知,在谷歌地图上放置一个按钮是不可能的,因为它覆盖了所有内容(这就是我将它作为容器 View 的原因)。现在我遇到了一个问题,我无法制作一个可以performSegue
的操作按钮,而且我也未能通过NotificationCenter
传递一个对象。我制作了一个名为 Song 的模型,我想将歌曲 List
传递给其他 Controller (表格 View )。
class Song {
var sid: String
var songName: String
var artistId: String
var length: String
var songImage: String?
var album: String
var lastUpdateate?
}
对于在 VC 之间移动此列表有何想法或建议? 但是,这些 View 之间没有真正的联系,mainVC 将它们都作为容器保存。
所以你的 MainController 拥有两个必须交换数据的 Controller ?方法是使用 Delegate 模式并设置 Controller 之间的弱关系:
protocol SongSelectable {
func songSelected(_ song: Song)
}
class PlaylistController: UIViewController {
weak var songSelectable: SongSelectable?
}
class MapController: UIViewController, SongSelectable {
func songSelected(_ song: Song) {
//do your code
}
}
class MainController: UIViewController {
weak var mapController: MapController?
weak var playlistController: PlaylistController?
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// You can't guaranty order here, so some duplication required
if let controller = segue as? MapController {
mapController = controller
playlistController?.songSelectable = controller
}
else if let controller = segue as? PlaylistController {
playlistController = controller
controller.songSelectable = mapController
}
}
}
另一种选择:通过 block 建立连接。这是一种更现代、更快捷的方式:
typealias SongHandler = (Song)->()
class PlaylistController: UIViewController {
var songHandler = SongHandler?
}
class MapController: UIViewController {
func songSelected(_ song: Song) {
//do your code
}
}
class MainController: UIViewController {
weak var mapController: MapController?
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let controller = segue as? MapController {
mapController = controller
}
else if let controller = segue as? PlaylistController {
controller.songHandler = { [unowned self] (song) in self.mapController?.songSelected(song)
}
}
}
请注意,上面的代码片段只是说明,您有很多方法可以访问 Controller 、设置委托(delegate)或 block 。
关于ios - 在 View Controller 之间传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48227890/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |