UIScrollView对象通过引用传递,而不是返回

时间:2011-05-04 23:31:34

标签: iphone ios uikit uiscrollview pass-by-reference

我有一个场景:

  • 带有UIViewController(mainVC)的UINavigationController,带有包含UIScrollView(scrollView)的UIView(mainView)
  • mainView中的全屏按钮,点击它时会推送一个新的UIViewController(fullScreenVC),其中scrollView对象通过引用传递(使用属性属性nonatomic和assign存储)。 fullScreenVC正确显示scrollView对象。
  • 关闭fullScreenVC后,NSNotification将发送到mainVC。这就是问题......

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

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

解决问题的唯一方法是在通知步骤中将scrollView添加回mainVC。发送UIScrollView对象(或更常见的UIKit对象)时,我需要做些什么特别的事情吗?或者我在某处做过蠢事?

1 个答案:

答案 0 :(得分: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”。