来自代码的 UICollectionView 中的 Hide/show 个部分 (swift)

Hide/show sections in UICollectionView from code (swift)

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

所以我有一个主要 ViewController.swift、设置 ViewController.swift。我的任务是hide/show个栏目,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

的数据源创建 objects
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)

}

实现了数据源方法以显示每个组中的成员,一个组是一个部分,组的名称在部分的 header 视图中指定。我在开始时根据用户设置将组加载到组数组:

func LoadGroups() -> Void {

    Groups = []

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

我有一个 segue 方法可以从设置ViewController 中获取值并重新加载组,当我点击设置ViewController 中的保存按钮时调用该方法,方法在 ViewController 中定义:

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

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

问题:当我点击开关控件使 ShowGroup2 为 false 时,我点击保存按钮,出现主视图,现在我滚动 collection 并出现致命错误:"fatal error: Array index out of range"。

在官方文档中:"Besides embedding it in your user interface, you use the methods of UICollectionView object to ensure that the visual presentation of items matches the order in your data source object."我为 UICollectionView 添加了 outlet 并尝试使用 func deleteSections(_ sections: NSIndexSet) 删除部分,但我没有看到这种用于 outlet 的方法。请帮助以正确的方式刷新 collection 视图。

为您的 UICollectionView 添加一个出口,以便您可以在代码中使用它。然后尝试添加调用以在 LoadGroups()

结束时更新数据时重新加载 UICollectionView
collectionView.reloadData()