2015-05-30 19 views
0

我是iOS開發人員和開發iOS 8,XCode 6.3,Swift 1.2的第一個應用程序的新手。我隱藏和顯示UICollectionView中的部分有一個小問題。從代碼隱藏/顯示UICollectionView中的節(swift)

所以我有一個主ViewController.swift,SettingsViewController.swift。我的任務是隱藏/顯示部分,SettingViewController中每個部分的一個開關控件。

我有一個下面的模型: Member.swift:

class Member { 
var Name: String 
var Image: String 

init (Name: String, Image: String){ 
    self.Name = Name 
    self.Image = Image 
} 
} 

Group.swift:

class Group {  
var Name: String 
var Members: [Member] 

init (Name: String, Members: [Member]){ 
    self.Name = Name 
    self.Members = Members  
} 
} 

在ViewController.swift我創建的UICollectionView

數據源對象
class ViewController: 
... 
var Groups: [Group] = [] 

var Group1 = Group(Name: "Group 1", Members: []) 
var Group2 = Group(Name: "Group 2", Members: []) 
var Group3 = Group(Name: "Group 3", Members: []) 

override func viewDidLoad() { 
... 
    CreateMembers() 
    LoadGroups() 

} 

func CreateMembers() -> Void { 

    var member1 = Member(Name: "Member 1 in Group 1", Image: "face1") 
    var member2 = Member(Name: "Member 2 in Group 2", Image: "face2") 
    var member3 = Member(Name: "Member 3 in Group 3", Image: "face3") 

    Group1.Members.append(member1) 
    Group2.Members.append(member2) 
    Group3.Members.append(member3) 

} 

和數據源方法實現顯示每個成員組和一個組是一個部分,組的名稱在該部分的標題視圖中指定。餘負載組的組陣列,取決於用戶設置在啓動:

func LoadGroups() -> Void { 

    Groups = [] 

    if ShowGroup1 { 
     Groups.append(Group1) 
    } 
    if ShowGroup2 { 
     Groups.append(Group2) 
    } 
    if ShowGroup3 { 
     Groups.append(Group3) 
    }  
} 

我有SEGUE方法從SettingsViewController獲得值並重新加載其當我點按SettingsViewController保存按鈕稱爲組,方法是在所定義所述的ViewController:

@IBAction func saveSettings(segue:UIStoryboardSegue) { 
    if let settingsViewController = segue.sourceViewController as? SettingsViewController { 
     ShowGroup2 = settingsViewController.ShowGroup2 
     LoadGroups()    
    } 
} 

在方法LoadGroup()我決定清除組陣列加載它同樣取決於改變的設置敲擊開關控制之後。

問題:當我點擊開關控件使ShowGroup2爲false時,我點擊保存按鈕,主視圖出現,現在我滾動收集並出現致命錯誤:「致命錯誤:數組索引超出範圍」。

在官方文檔中:「除了將其嵌入到您的用戶界面中,您還可以使用UICollectionView對象的方法來確保項目的可視呈現與數據源對象中的順序相匹配。我添加了UICollectionView的插座,並嘗試刪除使用func deleteSections(_ sections:NSIndexSet)的部分,但我沒有看到此插座的方法。請幫助以正確的方式刷新收集視圖。

回答

0

爲您的UICollectionView添加一個插座,以便您可以在代碼中使用它。然後嘗試將呼叫重新加載UICollectionView當你的數據在LoadGroups()

collectionView.reloadData() 
+0

感謝的端更新:d如我之前所述,我已經加入出口託收視圖,但插座有錯誤類型的UIView而不是UICollectionView 。但在這種情況下,我需要調用deleteSections()方法?我如何刪除和添加動畫部分? – Anton