ios - 将数据从任何 View Controller 传递到 iOS 中的一个主视图 Controller

标签 ios objective-c uiviewcontroller

我正在构建一个音乐播放器应用程序——在这个应用程序中,音乐播放器 View Controller 将始终位于任何其他 subview Controller (导航 View 、表格 View 等)之上我需要在任何潜在的 subview 中采取行动被发送回播放器 View Controller (例如,用户在个人资料页面上选择“播放”,然后我将该事件发送回去)我的问题是最好的方法是什么?我提前为有点含糊而道歉,但我已经知道我可以实现它的三种方法。我只想知道“正确”的方法是什么。

这是我想到的三种方式:

1.委托(delegate)模式——将音乐播放器 Controller 传递给它的子 Controller ,并在该事件传递时将自己设置为委托(delegate)(困惑,因为第一个 View Controller 是一个导航 View Controller ,所以我想我会必须将它向下传递几个级别,这意味着多个代表(如果我错了请纠正我))

2.Notification Center——为特定通知注册播放器 View Controller ,封装从其他 View Controller 发送的数据,以便我可以执行我的操作。

3.播放器 View Controller 的类单例访问 - 基本上允许从任何 View Controller 访问播放器 View Controller 。

感谢任何帮助引导我朝着正确的方向前进。我可以通过这两种方式中的任何一种来完成,但由于这是一个“学习”应用程序,我很乐意正确地完成它。

最佳答案

恕我直言,没有“正确的方法”。坦率地说,当我只阅读主题行时,我正在考虑他们三个。

当你征求意见时......我不会在这里推荐单例模式。这只是因为 View Controller 可以堆叠,并且本质上可以多次实例化。就可维护代码(其他人的可读性)而言,我会拒绝这种方法。

委托(delegate)模式很好。但是正如您所说,您必须将对此 View Controller 的引用从一个 View Controller 传递到下一个 View Controller 。是的,有点乱。 好吧,您可以在某个单例中存储对委托(delegate)的引用。这与将 View Controller 设计为单例不同。

通知中心最适合这种数据流。消息的发送者和接收者完全分离,不需要“相互了解”。对于各种多发件人和/或多收件人类型的消息,它是一个完美的模式。

好吧,正如我所说,这只是一个意见。

关于ios - 将数据从任何 View Controller 传递到 iOS 中的一个主视图 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23187295/

相关文章:

ios - UILabel 文本多行给定文本宽度

android - 将 mp3 文件从 Kiosk 直接传输到智能手机

ios - NSNumber 实例不会保留值

ios - TableView在reloadData上崩溃-“无法识别的选择器已发送到实例”

iphone - 使用 NSMutableSet 时出错

ios - UIViewController 动画 ios?

objective-c - 没有 TabBar Controller 的 TabBar

ios - 查看 AVPlayer 是否正在从互联网加载或播放 mp3

objective-c - Objective C 辅助方法

ios - dismissViewControllerAnimated VS popViewController 动画