2016-06-28 3 views
2

セルの数が特定の配列の文字列の数と等しいUICollectionViewがあります。新しい文字列が配列に追加されたときに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

新しい文字列を配列 'collview.reloadData()に追加するときこれを追加します –

+0

コレクションビューを再ロードする必要がありますデータが変更された後:collectionViewVariable.reloadData() – Sam

+0

@BhavinRamani、これは迅速な質問です。迅速な回答で返信してください – Sam

答えて

2

、あなたできreloadData()とそれ働くだろう! --- 非常に非効率的です :(コレクションビューの1000個のアイテムが1001番目のアイテムを追加するためにロードされていると想像してください)と1つのアイテムを更新したいだけです。よりよいなぜ、私たちは、インサート機能を持っており、それを使用する

- >あなたはこの後に添付のような何かを試すことができます。

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.) 
} 
+0

別のクラスから追加する場合、見る? – Khoury

+0

コードを表示して、別のクラスからどのように追加していますか? –

+0

私は私の答えを編集しました – Khoury

0

あなたは2つの異なるビュー間の通話を行うためにNSNotificationCenterを使用することができます。あなたはUICollectionViewを持ってviewDidLoad方法で次のコードを追加します。

NSNotificationCenter.defaultCenter().addObserver(self, selector: "loadList:", name:"load", object: nil) 

、その後、さらに下でこのメソッドを追加するには、UIViewContoller

func loadList(notification: NSNotification){ 
    self.collview.reloadData() 
} 

し、コレクションビューをリロードしたい、他のクラスから

NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil) 
関連する問題