gpt4 book ai didi

ios - 显示 ScrollView 中的 View 时如何更新? Viewdidload 不工作?

转载 作者:行者123 更新时间:2023-11-28 06:41:51 24 4
gpt4 key购买 nike

我的处境有点棘手,因为我的应用程序设计得像 Snapchat,因为我有 3 个 View (3 个不同的 xib 和类),它们都包含在一个 ScrollView 中。这是我在 ViewController 中的设置:

@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 仅在应用程序首次打开时被我的 View Controller 和这些 subview 调用一次,这意味着当我滚动浏览时它不会被我的 subview 一次又一次地调用。我的问题是我没有办法在我的 subview 中更新标签,因为我没有“更新”功能 -

我在 NSUserdefaults 中存储了几个整数/值,这些值会随着应用程序的运行而变化。在 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() 希望这会有所影响,但没有成功。这是一个大问题。

我应该尝试公开标签并直接从另一个 View 更改它们吗?是否有类似于 Sprite 工具包中的更新功能,我可以在每帧之前调用?

我该如何解决这个问题?

最佳答案

1:您应该在 subview Controller 中具有更新标签文本的功能。类似于 updatePhotoLabelWithInt(int: Int)

2:另一种选择是为您的 subview Controller 设置计算属性,或存储属性并观察这些属性,如下所示:

// 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

关于ios - 显示 ScrollView 中的 View 时如何更新? Viewdidload 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37752394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com