如何在将新字符串添加到数组时在UICollectionView中创建新单元格

时间:2016-06-28 07:44:07

标签: ios arrays swift uicollectionview uicollectionviewcell

我有一个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)

我不知道为什么这不起作用。如果我还不够具体,请告诉我提供更多信息。

2 个答案:

答案 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)