我是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)删除部分,但我没有看到这个方法的插座。请帮助您正确刷新集合视图。
答案 0 :(得分:0)
为UICollectionView
添加插座,以便您可以在代码中使用它。然后在UICollectionView
LoadGroups()
collectionView.reloadData()