【发布时间】:2015-04-23 17:36:29
【问题描述】:
我是一个初学者,显然不适合我,我无法在网上找到答案。
我有一个UITableViewController 和一个UITableView,显示存储在一个数组中的自定义对象。我没有在所述 TableView 的一个部分中显示数组的所有对象:TableView 有多个部分,每个部分包含我的对象数组的过滤部分(我过滤自定义对象数组检查对象类别属性等于我在类别数组中指定的类别)。
这种过滤并在不同部分显示单个数组工作正常(我知道这可能不优雅,因为我说过我是编码初学者,我绝对需要使用单个数组,而不创建与过滤结果相对应的其他数组),但为了更好地理解我的问题,我认为最好展示我所做的,所以这是我代码的 TableView 部分:
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return myCategoriesArray.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
for (var i = 0; i <= section; i++){
if section == i {
for eachCategory in myCategoriesArray {
return myObjectsArray!.filter() { $0.objectCategoryProperty == myCategoriesArray[i] }.count
}
}
}
// ...
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("objectCell", forIndexPath: indexPath) as UITableViewCell
for (var i = 0; i <= indexPath.section; i++){
if indexPath.section == i {
for eachCategory in myCategoriesArray {
cell.textLabel?.text = myObjectsArray!.filter() { $0.objectCategoryProperty == myCategoriesArray[i] }[indexPath.row].nameProperty
return cell
}
}
}
// ...
}
这在某种意义上是有效的,因为我有 UITableViewController 显示我的所有对象,但按类别在单独的部分中过滤。
当我选择一个单元格并显示详细视图时,我的问题是转场。
这是我的prepareForSegue 方法:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var nextVC = segue.destinationViewController as MyNextViewController
if let indexPath = tableView.indexPathForSelectedRow() {
let selected = myObjectsArray![indexPath.row]
nextVC.passedObject = selected
}
}
}
我相信你们中的许多人已经看到了我的问题:我传递给下一个 ViewController 的对象是在自定义对象数组中使用索引 [indexPath.row] 选择的,但 indexPath.row 开始于每个部分都为 0,所以当我选择一个对象时,它在 TableView 中的索引不等于自定义对象数组中的索引,这意味着我传递了错误的对象。
现在,我被卡住了,因为我看不到将正确(意思是,选定的)对象传递给下一个视图控制器的方法,同时 保留了我只使用单个数组的事实。
我想为每个对象添加一个 objectIDString 属性,并在每次选择单元格时设置一个 var currentSelectedObjectIDString,并尝试将 objectIDString 属性与 currentSelectedObjectIDString 匹配的对象传递给下一个视图控制器,但在我缺乏经验的人看来,这似乎是个坏主意,而且我实际上不确定如何才能做到这一点,即使我想这样做(也许实施didSelectRowAtIndexPath:,但我无法让它发挥作用)。
任何帮助都将不胜感激,我已经坚持了很长时间,我开始质疑 a)我的理智 b)我在项目中做出的每一个决定(意思是,所有对象的单个数组部分过滤),但我已经非常投入,我真的不想重新开始。
谢谢,
切萨雷
附:我希望我的问题很清楚,英语不是我的主要语言...抱歉任何错误!
【问题讨论】:
标签: iphone arrays uitableview swift segue