2017-05-21 88 views
1

我有一个表视图(Netflix应用风格)内的集合视图。我遵循这个教程:https://www.thorntech.com/2016/01/scrolling-in-two-directions-like-netflix-part-2-making-api-calls/Swift:准备不传递数据

现在我想实现一个功能,只要我点击一个集合视图,它会传递员工的名字到下一个视图控制器。 这里是我的代码:

import UIKit 

class CategoryRow: UITableViewCell, UICollectionViewDataSource { 

    @IBOutlet weak var collectionView: UICollectionView! 

    var jobpost:JobPosition? 
    var employee: Employee? 

    var myname = "" 


    func collectionView(_ collectionView: UICollectionView,  numberOfItemsInSection section: Int) -> Int { 
     return jobpost!.Employees.count 
    } 

    func collectionView(_ collectionView: UICollectionView,  cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "videoCell", for: indexPath) as! EmployeeCell 
    cell.employeephoto.image = UIImage(named: "spanner") 

    cell.employeename.text = jobpost?.Employees[indexPath.row].name 

    return cell 
} 

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    let myname = jobpost?.Employees[indexPath.row].name 
    //print(myname) 
} 

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     let EmployeeDetailPage = segue.destination as? EmployeeDetailViewController 

     EmployeeDetailPage?.employeename = myname 
     print(myname) 
} 

现在我的问题是,整个PrepareForSegue功能实际上并没有运行。该应用程序运行正常没有任何错误,但数据只是没有通过? (即打印(myname)实际上没有打印任何东西)。

有什么我错过了吗?非常感谢。

+0

这已经为它的答案http://stackoverflow.com/questions/42739412/send-data-from-tableviewcontroller-to-detailviewcontroller/42744464#42744464 你不需要使用'prepareForSegue'方法。只有使用'didSelectRowAtIndexPath'方法才能实现此目的。 –

回答

1

步骤1

在CategoryRow

var myname: String! 

步骤2

更改didSelectItemAt FUNC贝罗一样创建一个全局变量瓦特

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    myname = jobpost?.Employees[indexPath.row].name 

    performSegue(withIdentifier: "EmployeeDetailViewController", sender: myname) 
} 

步骤3

在EmployeeDetailViewController

var employeename: String! 

步骤4

创建变量给一个标识符到您SEGUE。在这里,我给“EmployeeDetailViewController” 然后改变prepareForSegue FUNC像下面

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     if segue.identifier == "EmployeeDetailViewController" { 

      if let EmployeeDetailVC = segue.destination as? EmployeeDetailViewController { 

       if let employeename = sender as? String { 

        EmployeeDetailVC.employeename = employeename 

       } 

      } 

     } 
} 
1

看起来像你的问题是,你在collectionView(_:didSelectItemAt:)方法中设置了一个叫做myname的本地允许常量,而不是设置你的类的myname属性。

let myname = jobpost?.Employees[indexPath.row].name 

应该是:

myname = jobpost?.Employees[indexPath.row].name