2016-06-10 75 views
1

因爲我的應用程序像Snapchat一樣設計,所以我有3個視圖(3個不同的xib和類),它們都包含在滾動視圖中。這是我設立的ViewController:如何在滾動視圖中顯示視圖時更新? Viewdidload不工作?

@IBOutlet var scrollView: UIScrollView! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     let v1 : View1 = View1(nibName: "View1", bundle: nil) 
     let v2 : View2 = View2(nibName: "View2", bundle: nil) 
     let v3 : View3 = View3(nibName: "View3", bundle: nil) 

     self.addChildViewController(v1) 
     self.scrollView.addSubview(v1.view) 
     v1.didMoveToParentViewController(self) 

     self.addChildViewController(v2) 
     self.scrollView.addSubview(v2.view) 
     v2.didMoveToParentViewController(self) 

     self.addChildViewController(v3) 
     self.scrollView.addSubview(v3.view) 
     v3.didMoveToParentViewController(self) 

     var v2Frame : CGRect = v2.view.frame 
     v2Frame.origin.x = self.view.frame.width 
     v2.view.frame = v2Frame 

     var v3Frame : CGRect = v3.view.frame 
     v3Frame.origin.x = self.view.frame.width * 2 
     v3.view.frame = v3Frame 

     self.scrollView.contentSize = CGSizeMake(self.view.frame.width * 3, self.view.frame.height) 


    } 

viewDidLoad中只受我的視圖控制器,當應用程序第一次打開這些子視圖調用一次,這意味着它不會被我的子視圖一次又一次地叫,當我翻閱。我的問題是我沒有辦法更新我的子視圖中的標籤,因爲我沒有「更新」功能 -

我在NSUserdefaults中存儲了多個ints/values,這些更改隨着應用程序的運行而變化。在View1我有3級的標籤,顯示與某些鍵INT值:

if prefs.objectForKey("photos") != nil //fix for cross updating 
     { 
      photos.text = String(self.prefs.integerForKey("photos")) 
     } 
     else { 
      photos.text = "0" 
     } 

這個偉大的工程,但只有當應用程序第一次打開。如果prefs.integerForKey("photos")在應用運行時發生變化,當我翻轉回View1時,標籤仍會顯示相同的舊值。我無法再次調用上述代碼塊來更新標籤。

我試過prefs.synchronize()希望這可能會影響某些東西,但沒有成功。這是一個很大的問題。

我應該嘗試使標籤公開並直接從其他視圖改變它們嗎?是否有一個更新函數與我在每幀之前可以調用的sprite工具包中的函數類似?

我該如何解決這個問題?

回答

1

1:您應該在您的子視圖控制器中更新標籤文本的函數。像updatePhotoLabelWithInt(int: Int)

2:另一種選擇是已經計算爲您的孩子視圖控制器或存儲性能特性和觀察到的,像這樣的屬性:

// Option 1 
var numberOfPhotos: Int { 
    get { Int(label.text)! } 
    set { label.text = String(newValue) } 
} 

// Option 2 
var numberOfPhotos: Int { 
    didSet { label.text = String(numberOfPhotos) } 
} 

NSUserDefaults使用時要存儲特定的值,即使該應用程序被終止。除非您想保留這些值,否則請使用屬性,變量。

另外,你似乎沒有很好地描述你的變量/屬性。使用名稱photos作爲標籤是一個壞主意。應該是像photoLabel

相關問題