2011-05-04 96 views
0

我有一个场景,其中我有:UIScrollView的对象,而不是返回

  • 与一个UIViewController(mainVC)配有一个UIView(MAINVIEW)一个UINavigationController含有一个UIScrollView(滚动视图)
  • 一个在mainView中的全屏按钮,在这个按钮上点击它会推入一个新的UIViewController(fullScreenVC),并通过引用传递给它的scrollView对象(与属性非原子和赋值一起存储)。 fullScreenVC正确显示scrollView对象。
  • 在关闭fullScreenVC后,NSNotification被发送到mainVC。这就是问题所在......

当fullScreenVC被删除时,scrollVC不再显示在mainVC中。我可以通过在通知期间打印出日志上的scrollView来告诉它仍然存在。

我会认为通过引用发送和存储scrollView,mainVC仍然会保留它。我也尝试将scrollView发送回mainVC以防它被移除,但那没有做任何事情。

解决它的唯一方法是在通知步骤中将scrollView添加回mainVC。在发送UIScrollView对象(或更一般的UIKit对象)时有什么特别的事情要做?或者我在某处做了些什么愚蠢的事情?

回答

1

没有传递引用。在Objective-C中,我们有指向对象的指针,这些指针被分配并传递(从来不是对象本身)。

无论如何,这是不相关的。你的问题是,在UIKit中,一个视图只能有一个超级视图(它是一个树形层次结构)。当您将视图作为子视图添加到另一个视图时,它会自动从其先前的超级视图中移除(如果有)。请参阅addSubview的文档:这里:https://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instm/UIView/addSubview

您是否真的需要在两个不同的屏幕上显示相同的滚动视图?这似乎有点奇怪。你应该有两个不同的滚动视图;或者,您可以确保在完成另一个完成后将其添加回“mainView”。

+0

啊,这是有道理的,一个视图只能有一个超级视图。我在2个不同的屏幕中使用滚动的原因是因为在滚动视图中添加了一些项目的设置很多,我认为重新创建它是件浪费。当我完成后,我最终将其添加回mainView。 我认为按引用传递和传递指针是一样的东西(与通过值传递相反,在哪里传递对象)?可能只是C/C++术语。 – zlog 2011-08-15 08:54:38

相关问题