【发布时间】:2015-08-13 14:01:22
【问题描述】:
我是 iOS 开发新手,我正在为 iOS 8、XCode 6.3、Swift 1.2 开发我的第一个应用程序。我在 UICollectionView 中隐藏和显示部分有一个小问题。
所以我有一个主要的 ViewController.swift,SettingsViewController.swift。我的任务是隐藏/显示部分,为 SettingViewController 中的每个部分提供一个开关控件。
我有以下型号: 成员.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)
}
实现了数据源方法来显示每个Group中的成员,一个Group是一个section,Group的名称在section的标题视图中指定。我在开始时根据用户设置将组加载到组数组中:
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 为 false 时,我点击保存按钮,出现主视图,现在我滚动集合并出现致命错误:“致命错误:数组索引超出范围”。
在官方文档中:“除了将其嵌入到您的用户界面中,您还可以使用 UICollectionView 对象的方法来确保项目的视觉呈现与您的数据源对象中的顺序相匹配。”我为 UICollectionView 添加了出口并尝试使用 func deleteSections(_section: NSIndexSet) 删除部分,但我没有看到这种出口方法。请帮助以正确的方式刷新集合视图。
【问题讨论】:
标签: swift ios8 uicollectionview