从代码中隐藏/显示UICollectionView中的部分(swift)

时间:2015-05-30 20:23:03

标签: swift ios8 uicollectionview

我是iOS开发新手,开发我的第一个iOS 8应用程序,XCode 6.3,Swift 1.2。我在UICollectionView中隐藏和显示部分有一个小问题。

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

}
实现

和数据源方法以显示每个组中的成员,并且一个组是一个部分,该组的名称在该部分的标题视图中指定。我根据开始时的用户设置将组加载到Groups数组:

func LoadGroups() -> Void {

    Groups = []

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

我有一个segue方法从SettingsViewController获取值并重新加载组,当我点击SettingsViewController中的Save按钮时调用,方法在ViewController中定义:

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

在方法LoadGroup()中,我决定清除Groups数组,以便在点击开关控制后根据更改的设置再次加载它。

问题:当我点击开关控制使ShowGroup2为假时,我点击保存按钮,主视图出现,现在我滚动收集并出现致命错误:“致命错误:数组索引超出范围”。

在官方文档中:“除了将其嵌入到用户界面中之外,还可以使用UICollectionView对象的方法来确保项目的可视化表示与数据源对象中的顺序相匹配。”我添加了UICollectionView的插座,并尝试使用func deleteSections(_ sections:NSIndexSet)删除部分,但我没有看到这个方法的插座。请帮助您正确刷新集合视图。

1 个答案:

答案 0 :(得分:0)

UICollectionView添加插座,以便您可以在代码中使用它。然后在UICollectionView

结束时更新数据时,尝试添加调用以重新加载LoadGroups()
collectionView.reloadData()