我有一个UICollectionView
,其单元格数等于某个数组中的字符串数。
当我向数组追加一个新字符串时,我希望它能创建一个新的单元格,但事实并非如此。
func addDateToArray(dateString: String) {
Globals.datesArray.append(dateString)
NSUserDefaults.standardUserDefaults().setObject(Globals.datesArray, forKey: "saveddates")
}
我将从另一个视图中追加
@IBAction func SetDate(sender: AnyObject) {
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let day = dateTimePicker.date
let datestring = dateFormatter.stringFromDate(day)
addDateToArray(datestring)
我不知道为什么这不起作用。如果我还不够具体,请告诉我提供更多信息。
答案 0 :(得分:2)
要添加新单元格,您可以 reloadData()
并且 可以正常工作! ---但 非常低效 :(你只想更新一个项而不是整个collectionView(想象一下如果1000个项目集合中)视图被加载到只添加第1001项)。所以必须有更好的东西
这就是为什么我们有插入功能,并使用它 - >您可以尝试添加 附加后的内容。 :
let count = yourStringArray.count // updated Count of array
let index = count > 0 ? count - 1 : count // find the index, where you want to add the item.
let indexPath = NSIndexPath(forItem: index, inSection: 0) // make an indexPath out of the found index!
collectionView!.insertItemsAtIndexPaths([indexPath]) // This will call dataSource methods itself
// And you should be good to go!
提出问题,如果有任何疑问: - )
修改 从其他类更新集合视图的代码
在评论中继续提供建议,您可以在viewDidLoad
中在您的collectionView类中添加观察者:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(YourCollectionViewController.loadList(_:)),name:"load", object: nil)
// And add this function in class
func loadList(notification: NSNotification){
let count = yourStringArray.count
let index = count > 0 ? count - 1 : count
let indexPath = NSIndexPath(forItem: index, inSection: 0)
collectionView!.insertItemsAtIndexPaths([indexPath])
}
然后在你的其他课程中你可以这样做:
NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil)
<强>附加:强> 请注意,您可以通过通知发送对象。您可以在集合视图类本身中发送对象并附加到数组
像这样? :NSNotificationCenter.defaultCenter().postNotificationName("load", object: someDateasStringType)
然后你可以收到这个日期并附加在这个类(你的collectionview类)中,如下所示:
func loadList(notification: NSNotification){
let returnedDate = notification.object as! String
// convert string to Date. and append and insert to collection View (all mentioned above.)
}
答案 1 :(得分:0)
[不推荐] - reloadData
将重新加载Collection / Table View
您可以使用NSNotificationCenter在两个不同的视图之间进行通话。在viewDidLoad
方法中添加以下代码,其中UICollectionView
:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "loadList:", name:"load", object: nil)
然后在UIViewContoller
:
func loadList(notification: NSNotification){
self.scollview.reloadData()
}
以及当您想要重新加载集合视图时从其他类:
NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil)