获取tableView单元格数据的详细视图

时间:2014-12-30 19:52:12

标签: ios uitableview core-data swift

我是swift的新手,我想弄清楚的是如何从表视图中创建一个细节视图控制器。现在我设置了segue(带有“showDetails”标识符)来打开详细视图控制器。这是我想要在表视图控制器中使用的代码,我不想确定我是否正确执行此操作。任何帮助将不胜感激!

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

    //Core Data
    let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let managedContext : NSManagedObjectContext = appDelegate.managedObjectContext!
    var fetchRequest = NSFetchRequest(entityName: "Log")
    fetchRequest.returnsObjectsAsFaults = false;
    var results: NSArray = managedContext.executeFetchRequest(fetchRequest, error: nil)!


    var totalHoursWorkedSum: Double = 0
    var logsArray = [String]()

    for res in results {
        var totalWorkTimeInHours = res.valueForKey("totalWorkTimeInHours") as Double
        var dateString = res.valueForKey("dateString") as String
        var comments = res.valueForKey("comments") as String



        var loggedTotalWorkTimeInHours = "\(totalWorkTimeInHours)"
        var loggedDateString = "\(dateString)"
        var loggedComments = "\(comments)"

        let destinationVC = segue.destinationViewController as LogDetailTableViewController
        destinationVC.logTimeTextField.text = loggedTotalWorkTimeInHours
        destinationVC.logDateTextField.text = loggedDateString
        destinationVC.commentsTextField.text = loggedComments

    }
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {


    let selectedLog: AnyObject = loggedTimes[indexPath.row]


    let destinationVC = LogDetailTableViewController()
    destinationVC.logTimeTextField = selectedLog as UITextField
    destinationVC.logDateTextField = selectedLog as UITextField
    destinationVC.commentsTextField = selectedLog as UITextField

    destinationVC.performSegueWithIdentifier("showDetails", sender: self)
}

我不知道该怎么做不同当我尝试点击tableview单元以试图显示细节时,我一直没有崩溃。

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。首先,使用segues,您不会创建目标视图控制器 - 它是为您创建的。您应该删除didSelectRowAtIndexPath中创建详细视图控制器的行,因为它不会被绑定。

其次,根据您从表视图控制器连接segue的方式,您可能需要也可能不需要调用performSegueWithIdentifier。

在故事板中连接segue的常用方法是从原型单元格到详细视图控制器。使用这种方法,当用户点击单元格时会自动触发segue。您无需显式调用performSegueWithIdentifier。

另一方面,如果你将segue从表视图控制器连接到详细视图控制器,那么你需要调用它。

在任何一种情况下,您都需要从选定的单元格中获取相关信息,以传递给prepareForSegue中的详细视图控制器。我使用的一种技术是在类级别属性中保存对单元格数据(您的selectedTime)的引用,然后通过我在其上定义的属性将其发送到目标视图控制器。