【发布时间】:2013-12-02 17:08:12
【问题描述】:
这可能是一个愚蠢的问题,但我会开枪的。
我做了一个小测试项目来测试我对滑动视图控制器类型的概念。我天真地假设我可以在控制器中创建一个带有插座的 UIView(我们称之为 peekView),并从任何可见的视图控制器调用类似 [slidingControllerSlideFrom:self.view] 的东西,这样的实现是:
- (void)slidingControllerSlideFrom(UIView*)controllersMainView
{
// push side controller to top of navigation stack
self.peekView = controllersMainView;
// sliding animation
}
但是没有效果。推送控制器中没有崩溃、没有警告、没有视图变化。 当然,当尝试将自己的视图添加为子视图时,推送的控制器会崩溃,但将其分配给预定义的 UIView 只会导致任何结果。
那么,为什么?如果仅仅“为什么”还不足以成为一个问题——当我尝试将一个控制器的视图分配给另一个控制器的子视图时会发生什么,以及设计 UIKit 的原因是什么,您无法从 self.view 设置视图?
【问题讨论】:
-
你在哪里设置
self.view?我在您的代码中没有看到任何地方...... -
在你的赋值之后放置一个断点并打印出两个视图的值,包括它们的父视图和框架。它可能会让人们更容易知道发生了什么。
-
@bdesham 我改写了示例代码以更准确地适应问题。不过效果一样。
self.view由 xib 定义,属于任意控制器。peekView是菜单控制器的子视图,它也是由一个 xib 定义的。这清楚了吗? -
我知道有很多方法可以实现滑动控制器,但这不是我的目标。我只是想了解为什么以及如何从
self.view设置视图是不允许的,因为它似乎是在其他控制器中显示视图控制器视图的最直接方式(是的,有 addChildViewController 但这是 iPhone 中的一些禁忌原因) -
刚刚注意到您的评论并更新了我的答案以尝试回答您实际提出的问题。
标签: ios objective-c uiview uikit