2011-05-04 92 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

相關問題