将tableViewCell中的数据传递给另一个VC失败

时间:2017-02-25 11:19:46

标签: ios swift uitableview

我知道它经常有问题,但我做了一些研究,没有一个解决方案有效。

所以这是我的带有表视图的控制器

class MainPage: UIViewController, UITableViewDelegate, UITableViewDataSource, YoubikeManagerDelegate {
@IBOutlet weak var tableView: UITableView!

let mainPageCell = MainPageCell()
let mapPage = MapViewController()

var stations: [Station] = []
override func viewDidLoad() {
    super.viewDidLoad()
    tableView.delegate = self
    tableView.dataSource = self
     }
override func viewDidAppear(_ animated: Bool) {
}
func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "infoCell") as! MainPageCell
    cell.stationNameLabel.text = stations[indexPath.row].name
    cell.stationLocationLabel.text = stations[indexPath.row].address
    cell.numberOfRemainingBikeLabel.text = stations[indexPath.row].numberOfRemainingBikes
    cell.printer = stations[indexPath.row].name
    cell.mapBtn.tag = indexPath.row
    cell.mapBtn.addTarget(self, action: #selector(moveToMapPage), for: .touchUpInside)
    return cell
}
func moveToMapPage(sender: UIButton) {
    self.performSegue(withIdentifier: "toMap", sender: self)
    let nameToPass = stations[sender.tag].name
    mapPage.stationName = nameToPass
}

}

我的tableView单元格中有一个UIButton

class MainPageCell: UITableViewCell {
var printer: String!
let mapPage = MapViewController()
@IBOutlet weak var stationNameLabel: UILabel!
@IBOutlet weak var mapBtn: UIButton!
@IBOutlet weak var stationLocationLabel: UILabel!
@IBOutlet weak var numberOfRemainingBikeLabel: UILabel!

override func awakeFromNib() {
    super.awakeFromNib()
    mapBtn.addTarget(self, action: #selector(mapBtnTapped), for: .touchUpInside)

}
func mapBtnTapped (sender: UIButton) {
        print (printer)

}
}

这是我的另一个vc

class MapViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate {
@IBOutlet weak var mapView: MKMapView!

var stationName: String = ""

override func viewDidLoad() {
    super.viewDidLoad()
    self.title = stationName
}

}

我将详细阐述我现在面临的问题! 我想要做的是当我点击tableView单元格中的按钮时,我想转到MapViewController并在同一单元格中将此vc的标题设为“工作站名称”。

所以在VC中使用tableView,在cellforRowAt函数中我调用了addTarget。 使用moveToMapPage函数

但是当我点击按钮并转到MapView VC时,stationName仍为零

我不知道出了什么问题, 任何提示都表示赞赏

2 个答案:

答案 0 :(得分:3)

mapPage 您要导航到的实例,因此您在不相关的控制器上设置变量。

如果您想获得指向新控制器的链接

,则需要使用prepare(for segue...
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
    // if you have multiple segues, you can set up different actions for each
    if segue.identifier == "segueToMap"
    {
        let mapPage : MapViewController = segue.destination as! MapViewController

        let mapPage : MapViewController = segue.destination as! MapViewController
        mapPage.stationName = nameToPass
        mapPage.delegate = self // if required
    }    
}

答案 1 :(得分:1)

使用导航控制器

 let vc = self.storyboard?.instantiateViewController(withIdentifier:"toMap") as! toMapViewController
 vc.stationNam = stations[sender.tag].name
self.navigationController?.pushViewController(vc, animated: true)