切换 XIB 视图 - Cocoa Mac

Posted

技术标签:

【中文标题】切换 XIB 视图 - Cocoa Mac【英文标题】:Switch XIB Views - Cocoa Mac 【发布时间】:2010-12-25 15:15:26 【问题描述】:

我对编码很陌生,想知道如何在单击按钮时切换 XIB 视图。切换时是否还有添加动画?

谢谢,

凯文

【问题讨论】:

我无法使用 iphone api 系统。我正在创建一个 mac 应用程序。 【参考方案1】:

这是完全可能的,但您需要做一些事情。我想您已经熟悉将出口连接到您的 XIB 中的对象,所以您需要做的第一件事是在您的 XIB 中创建自定义视图并将它们连接到您的 appDelegate 中的出口。我建议将其中一个视图拖到窗口中,将一个视图拖到窗口外。这样,当窗口加载时,它已经将您的自定义视图之一作为子视图。这只是让上手更容易。

然后您将在 appDelegate 中编写一个 IBAction 并将其连接到您的按钮。假设其中一个自定义视图已经由窗口托管,IBAction 应该像 [[window.contentView animator] replaceSubview:firstView with:secondView]; 一样向窗口的 contentView 动画师发送一个 replaceSubviewWith 消息,其中 firstView 和 secondView 是您声明并连接到视图的指针/出口你的 XIB。

这是向窗口内容视图的动画代理发送一条消息,告诉它用新的子视图替换旧的子视图。将消息发送到视图的动画代理(而不是视图本身)的原因是过渡将使用默认的 CATransitionAnimation 执行。因为您希望它具有动画效果,对吧?

您不应该删除一个子视图然后添加另一个的原因是动画删除子视图实际上非常棘手,并且需要实现委托方法animationDidEnd。这是因为在已从视图层次结构中删除的视图上执行动画没有意义。我不知道为什么 Apple 没有改变这一点,但现在它将成为 CoreAnimation 经久不衰的怪癖之一。

如果有帮助,请告诉我。我很高兴澄清!欢迎来到 Cocoa!

【讨论】:

只是一个问题,这些“视图”具体是 firstView 和 secondView 可以位于不同的 XIB 上吗? 是的,但他们不需要。有什么理由需要它们在单独的 xib 中?【参考方案2】:

一个简单的方法是使用表格 NSTabView - 您可以在 IB 中布置所有内容,因此痛苦最小。

【讨论】:

以上是关于切换 XIB 视图 - Cocoa Mac的主要内容,如果未能解决你的问题,请参考以下文章

XCode/Cocoa Mac 改变视图

如何在 Cocoa 应用程序中切换视图?

根据方向在 XIB 中切换视图

Cocoa 自动布局和调整子视图的大小

来自 NSWindowController Cocoa 的自定义视图

将 XIB 的 UIScrollView 添加到视图时设置 contentSize