【问题标题】:Hide/show sections in UICollectionView from code (swift)从代码中隐藏/显示 UICollectionView 中的部分(swift)
【发布时间】: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


    【解决方案1】:

    为您的UICollectionView 添加一个插座,以便您可以在代码中使用它。然后尝试在LoadGroups()末尾更新您的数据时添加调用以重新加载UICollectionView

    collectionView.reloadData()
    

    【讨论】:

    • 谢谢 :D 正如我之前所描述的,我已经为集合视图添加了出口,但是出口的 UIView 类型错误,而不是 UICollectionView。但是在这种情况下我需要调用 deleteSections() 方法吗?如何删除和添加动画部分?
    猜你喜欢
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    相关资源
    最近更新 更多