我需要根据对api的http调用创建自定义布局。根据api in loop的结果,我将从CollectionView
填充一个数组在CustomLayout中我需要使用这个数组才能在每一行中正确绘制细节。 在collectionView中,我将数据添加到数组
后使用重新加载数据感谢YOu
代码:
class epgViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource{
var events = [Event]()
@IBOutlet weak var collectionView: UICollectionView!
//another initializations
. . .
//====== load Events ===============
func get_events() {
//http api call
//as result in loop i append data to Events()
self.events.append(newEvent)
//reload collection view data
self.collectionView.reloadData()
}
}
//////////
/// LAyout
////////
class customCollectionViewLayout: UICollectionViewLayout {
//prepare layout
override func prepareLayout() {
for section in 0...collectionView!.numberOfSections()-1 {
how to access array from collectionView
Events[i] ????
}
}
}
答案 0 :(得分:0)
我不完全确定我理解你的情况,但我会在你的申请中提供两种沟通方式。
添加观察者在需要触发事件的控制器的viewDidLoad中:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "remoteRefresh:", name:"remoteRefreshID", object: nil)
在同一个控制器中添加一个名称与我们的选择器相同的观察者,在上面的示例“remoteRefresh”中。
func remoteRefresh(notification: NSNotification) {
// do stuff
}
然后在你的其他控制器中可以发布消息,你的remoteRefresh动作将会运行:
NSNotificationCenter.defaultCenter().postNotificationName("remoteRefreshID", object: nil)
有关详细信息,我在NSNotificationCenter上有two part tutorial
第二个是协议/代理模式,它涉及更多但我在这里有一个书面教程:
如果您仍然遇到问题,可以选择此选项。您可以声明一个全局结构来保存您的数据,将其粘贴到操场上以便理解。
struct SessionData {
static var events = [String]()
}
class classOne {
func addValues() {
SessionData.events.append("a message")
SessionData.events.append("another message")
}
}
class classTwo {
func getValues() -> [String] {
return SessionData.events
}
}
classOne().addValues()
classTwo().getValues()