以两种方式显示视图(推送和模态)

Posted

技术标签:

【中文标题】以两种方式显示视图(推送和模态)【英文标题】:Displaying a view in two ways (push and modally) 【发布时间】:2012-10-26 20:15:40 【问题描述】:

我正在使用故事板。我有一个UINavigationController,有一个UITableViewController 作为它的rootViewController。在这个表格视图中,用户可以通过两种方式访问​​DetailViewController(一个自定义的UIViewController 子类):

    点按表格单元格以查看其信息 点击加号按钮创建新项目

对于方式 1,我希望我的 segue 被推送。对于方式 2,我希望以模态方式显示详细信息。

起初我以为这应该不会太难,但我遇到了一些麻烦。是什么导致了这个麻烦:导航栏。当下一个视图被推送时,导航栏就在那里。但是,当下一个视图模态显示时,导航栏不存在。

我知道 Apple 已经考虑过这一点,这是最合乎逻辑的方法,但我需要模式视图中的导航栏再次关闭模式视图(使用取消和完成按钮)。通过界面生成器添加此导航栏不会带来好运:对于模态显示的视图,它可以正常工作,但在我的推送视图中,我突然有两个导航栏。

对此的逻辑解决方案是以编程方式添加导航栏,如果视图以模态方式显示。我这样做了,并显示了导航栏,但它与视图重叠。我尝试调整视图的大小,使其与被推送的视图具有相同的大小,但我没有设法解决问题:导航栏仍然与视图重叠。

此时我停止尝试有两个原因:我不知道该尝试什么了,而且我觉得应该有一个更简单的方法,因为我可能不是唯一一个尝试实现这一目标的人。

谁能帮帮我?

【问题讨论】:

为什么从同一个表中以两种不同的方式呈现同一个视图控制器很重要?似乎在推动 v.c.无论是编辑现有项目还是创建新项目,导航堆栈都是有意义的。 这当然是可能的,但我觉得在创建新项目时以模态方式呈现它更自然。我不会因为不能马上开始工作而改变主意。 我发表评论是因为更改设计并不能回答问题,但我认为您应该重新考虑。您描述的新项目按钮似乎不适合the criteria for modal presentation。很难看出用户从两个不同的演示文稿中获得了哪些额外的好处。统一这两种情况将使您的应用程序看起来不那么复杂。如果它也更容易实现,那很好,对吧? 我明白你在说什么,而且我也认为应用程序中使用的演示文稿必须具有完美的意义,这一点非常重要。我认为添加新项目的模态呈现视图确实适合,因为用户必须明确保存或取消它。我不认为在同一视图中使用这两种演示样式时,应用程序不会太复杂。 【参考方案1】:

您可以使用您的详细视图控制器作为其根视图控制器创建另一个导航控制器。然后使用您的主视图控制器作为演示者以模态方式呈现该新导航控制器。

【讨论】:

这并不像我希望的那样优雅,但至少它有效。 ;-)

以上是关于以两种方式显示视图(推送和模态)的主要内容,如果未能解决你的问题,请参考以下文章

在 ipad 中模态显示视图并在 iphone 中推送

ios:如何关闭模态视图控制器,然后弹出推送的视图控制器

iphone - 将子视图添加到窗口后无法推送模态视图?

从模态视图控制器推送/弹出到另一个视图控制器(包括图片)

我可以从另一个模态视图控制器中推送模态视图控制器吗?

为什么我的导航控制器现在是以模态方式进行转换而不是推送?