1

因此,我正在开发一个应用程序,该应用程序具有多个表格视图,可将您带到详细视图,并且该详细视图可以将您带到地图视图或 web 视图,这是我的意思的一个示例: 在此处输入图像描述

我没有制作几个详细信息组(详细信息、网络、地图),而是制作所有表格视图,带您到同一个详细信息视图并将信息放在那里,因为其中会有很多包含信息的行,这样就不会不可能。现在这不是什么大问题,但我认为我没有做我应该做的事情。基本上我是这样传递信息的:在“prepareforsegue”函数中,从tableview到detailview我使用“if indexPath.row == 0”,然后根据选择的行传递信息,我有一个整数设置为在表格视图上单击的行号的变量,并且该变量也传递给详细视图,因此在详细视图中我知道要传递给 webview 的网站或传递给 mapview 的位置,

4

1 回答 1

1

您应该有一个类来封装与单个表行/详细视图相关的所有信息。让我们称之为model

在表格视图控制器中,您将有一个models 数组,例如

var models = [model]()

您将覆盖cellForRowAtIndexPath以返回基于特定模型的单元格,例如

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("someCellId", forIndexPath: indexPath) as! UITableViewCell

    let model = models[indexPath.row]

    // Set the title of the cell to be the title of the logItem
    cell.textLabel?.text = model.name
    cell.detailTextLabel?.text = model.details
    return cell
}

在情节提要中对详细视图进行转场,然后将整个传递model给详细视图

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
    if (segue.identifier == "segueToDetail") {
        var svc = segue.destinationViewController as! DetailViewController
        svc.model = models[tableView.indexPathForSelectedRow()!.row]
    }
}

这样,您只传递一个对象,而不必设置所有详细视图标签等。然后详细视图可以将同一对象传递到地图视图或其他视图。

于 2015-08-17T06:18:53.253 回答