2016-06-10 72 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

相关问题