为什么我不能将UIView分配给self.view?

时间:2013-12-02 17:08:12

标签: ios objective-c uiview uikit

这可能是一个愚蠢的问题,但我会开枪。

我做了一个小测试项目来测试我对滑动视图控制器类型的概念。我天真地假设我可以用控制器中的插座创建一个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设置视图?

2 个答案:

答案 0 :(得分:1)

要做到这一点,你有两个选择:

1 - 如果peekView中的控制器在给定场景中始终是相同的,请使用“容器视图”。这些解释here。基本上,它们允许您在场景中添加由另一个控制器管理的视图。

2 - 如果peekView中的控制器依赖于不同的条件,则必须创建类似于自定义tabbarcontroller的东西。这意味着您实例化了所需的控制器,将其视图添加为peekView的子视图(不将控制器的视图分配给peekView本身),然后使用didmovetoparentviewcontroller通知子控制器。 This question可能有帮助。

<强>更新

刚刚看到你的评论,让我回答你实际问的问题:peekview属性实际上只是对你放在屏幕上的真实UIView的引用。当你这样做时:

self.peekView = controllersMainView;

您正在更改引用,但没有更改视图对象本身。这就是为什么你没有看到任何变化。有一些方法可以从代码向控制器添加新视图,但只需使用addSubview将控制器视图添加到控制器中已有的UIView就更简单了。

答案 1 :(得分:0)

查看此处的讨论:subView Slide up from bottom of the screen 在这里:SubView slide in animation, iphone

希望这能为您提供一些如何处理此任务的框架!