我是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单元以试图显示细节时,我一直没有崩溃。
答案 0 :(得分:1)
您的代码存在一些问题。首先,使用segues,您不会创建目标视图控制器 - 它是为您创建的。您应该删除didSelectRowAtIndexPath中创建详细视图控制器的行,因为它不会被绑定。
其次,根据您从表视图控制器连接segue的方式,您可能需要也可能不需要调用performSegueWithIdentifier。
在故事板中连接segue的常用方法是从原型单元格到详细视图控制器。使用这种方法,当用户点击单元格时会自动触发segue。您无需显式调用performSegueWithIdentifier。
另一方面,如果你将segue从表视图控制器连接到详细视图控制器,那么你需要调用它。
在任何一种情况下,您都需要从选定的单元格中获取相关信息,以传递给prepareForSegue中的详细视图控制器。我使用的一种技术是在类级别属性中保存对单元格数据(您的selectedTime)的引用,然后通过我在其上定义的属性将其发送到目标视图控制器。