实现 iOS 音乐应用的 UITabBarController 与选项卡之间的同步导航项
Posted
技术标签:
【中文标题】实现 iOS 音乐应用的 UITabBarController 与选项卡之间的同步导航项【英文标题】:Achieving iOS Music app's UITabBarController with synchronized navigation item between tabs 【发布时间】:2014-07-14 15:52:30 【问题描述】:我希望我正在开发的应用程序具有以下功能,可以在 ios 版 Apple Music 应用程序中看到:
UITabBarController
提供了几个不同的UITableViewController
。从这些表视图中选择任何项目将向前导航到播放该音频项目的视图控制器。导航回选项卡视图不会终止该项目的播放,但会在不同选项卡的每个上留下一个“正在播放”向前导航项目。选择该导航项后,应用程序将向前导航到播放器视图的相同实例,无论它是从哪个选项卡中选择的。
这可以在下面的屏幕截图中看到,其中可以在多个选项卡上看到“正在播放”前进导航项。
注意:我正在以编程方式进行所有操作;没有界面生成器。
【问题讨论】:
【参考方案1】:我假设您使用的是故事板..
您几乎无法使用情节提要实现动态导航行为,因为它们非常静态且不可扩展。 -- 恕我直言,它们很糟糕,但这是一个不同的故事;) --
如果您想在情节提要中实现此行为,则必须在每个选项卡中连接转场,这会导致“NowPlayingViewController”——在呈现“nowPlaying BarButtonItem”时不可扩展 +:a* 中的痛苦* 带有故事板。
代码更简单:
像往常一样创建一个UIViewController
子类(在这种情况下可能是“AAPLNowPlayingViewController”)。当您绝对必须在 interfaceBuilder 中构建界面时,您可以在情节提要中拖动一个新的 ViewController 并在那里进行设计。
现在是演示部分:
使用情节提要,您通常会从可以启动“NowPlayingVC”的任何地方开始连接segue——不要这样做,如上所述;)——
相反,在您希望能够启动 nowPlayingVC 的每个视图中设置 barButtonItem(“NowPlaying”按钮)。
在回调(目标、选择器对)中,您将在代码中实例化您的 viewController 并简单地调用 [self.navigationController pushViewController:nowPlayingViewController animated:YES]
在代码中实例化viewController:
这里有两种可能性:
您在 IB 中创建了布局:
致电[self.storyboard instantiateViewControllerWithIdentifier:@"nowPlayingViewController"]
您在代码中创建了布局(恕我直言;)):
只需拨打[[NowPlayingViewController alloc] init]
这将使您的应用能够从任何选项卡推送NowPlayingViewController
。
【讨论】:
我正在以编程方式做所有事情;没有界面生成器或故事板。关于您的解决方案:我希望每个选项卡的导航按钮都能够导航到播放器视图控制器的完全相同的实例。 然后你需要在你的应用程序的某个地方(可能是 AppDelegate)持有 playerViewController,并使用你持有的引用推送同一个实例以上是关于实现 iOS 音乐应用的 UITabBarController 与选项卡之间的同步导航项的主要内容,如果未能解决你的问题,请参考以下文章