通过 Segues,确定用户在啥视图上以及 NavigationController 按钮不出现

Posted

技术标签:

【中文标题】通过 Segues,确定用户在啥视图上以及 NavigationController 按钮不出现【英文标题】:Passing through Segues, Determining what view the user is on and NavigationController buttons not appearing通过 Segues,确定用户在什么视图上以及 NavigationController 按钮不出现 【发布时间】:2016-05-25 11:11:55 【问题描述】:

对于这个冗长且可能令人困惑的问题,我们深表歉意。在此,我的代码有两个主要问题,它们是: 1- 当我将 viewControllers 嵌入 UINavigationController 并添加一个条形按钮项时,什么都没有出现,但是当我将它添加到 pageViewController 时它会出现。其次,我想知道是否有办法以不同的方式执行此操作并使用 pageView 上的一个按钮(显示在其中的所有视图控制器上),并确定用户在按下按钮并被带到另一个视图控制器时正在查看的内容.

我正在尝试构建一个基于页面的应用程序,并且我已经为该应用程序设置了 7 个视图控制器(一周中的每一天一个)。然后我有一个 AddViewController,用户可以在其中将数据添加到某一天。我想知道是否有一种方法可以只使用 1 个链接到 PageViewController 上的 NavBar 的 addView,因为当我嵌入所有其他 viewController 并添加一个栏按钮时,它不会显示出来。

嵌入 pageViewController 后,这就是它上面带有条形按钮的样子。

这会导致:

效果很好,但是我想将数据传递给各种数组(每个 viewController 一个),并且我想知道用户希望添加到哪个 ViewController(基于他们在哪一天)。有没有办法确定这一点,然后展开到 viewController 并将正确的数据附加到正确的数组,或者我应该每天有一个 addView 视图控制器?如果是这种情况,我会遇到一个问题,即当它们嵌入到导航控制器中时,条形按钮项目不会出现在视图控制器上。它看起来像这样:

故事板:(例如:MondayViewController)

结果是缺少 barButton:(请记住,我将 tint Color 更改为白色,以便可见)

我想知道是否有人对我的任何一个问题都有答案,再次感谢您花时间在一个问题中查看这一系列问题。

欢迎提出任何建议!

罗文,

【问题讨论】:

不是一个答案,但是.... 拥有一个代表一周中任何一天的视图控制器并仅在日期变化时重新加载新数据不是更简单吗?多个控制器通常意味着不同的可见结构,而不仅仅是内容。至于“将数据传递给各种数组”,最好使用一个数据模型对象来管理应用程序状态并作为控制器的参考。 感谢您的建议。我有(就像你说的)一个视图控制器,它代表一周中的每一天(7),并且数据在同一个类中,但是为了方便起见,我在该类中有不同的数组,它们是数据的来源视图,但是我确实喜欢一个数据模型的想法。关于重新加载 collectionView,我的意图只是在执行 unwind segue 后重新加载它 实际上,我建议使用一个视图控制器来处理所有 7 天,而不是一个。 (即,如果结构保持不变且仅内容发生变化,则一个控制器可以代表任何一天。)这意味着您实际上并不需要页面,这可能会简化您尝试解决的其他事情。 【参考方案1】:

你可以这样做:

创建一个UINavigationViewController,然后在其中嵌入一个UIPageViewController

UIPageViewController的数据源中实现这两个方法:

- pageViewController:viewControllerBeforeViewController:
- pageViewController:viewControllerAfterViewController:

在这里,您将为每个位置返回正确的 DayViewController 实例(如果您在第一页/最后一页,则返回 nil)。您的数据模型也将在此处设置。

将您的“添加”栏按钮添加到UIPageViewController 的导航栏,并让它推送您的AddViewController。推送AddViewController 时,向其提供当前可见日期的信息。您可能需要自己跟踪这一点。使用UIPageViewController委托的- pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:方法。

【讨论】:

以上是关于通过 Segues,确定用户在啥视图上以及 NavigationController 按钮不出现的主要内容,如果未能解决你的问题,请参考以下文章

如何从 UIAlertView 按钮中解除 segues

不使用 Storyboard segues 的自定义视图转换 (Swift)

使用 Storyboard Segues 关闭弹出视图

故事板中的 Segues 问题

mvc3中关于Razor视图中的及页面区别,以及在啥情况下用哪个页面,最好能有实例。

在 iOS 5 上使用 Segues/Storyboard 弹出当前视图