2017-02-25 12 views
0

よく質問されていることはよく知っていますが、いくつかの調査を行いましたが、解決策はありません。ので、ここでtableViewCellのデータを別のVCに渡すとエラーが発生する

は、テーブルビューと私のコントローラのUIButtonが私のtableView細胞であり

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 
} 

}

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では、cellforRowAtの関数私はaddTargetを呼び出しました。 moveToMapPage機能

と が、私はボタンをタップし、MapViewのVC、stationNameに行く私が間違って何が起こるのか見当もつかない

nilをまだです、 任意のヒントが

答えて

3

mapPageない評価されていますあなたがナビゲートしているインスタンスであるため、関連のないコントローラで変数を設定しています。

あなたが新しいコントローラ

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 
    }  
} 
+0

へのリンクに答えるためちょっとラッセルのおかげを取得したい場合prepare(for segue...を使用する必要があります!私はナビゲーションのものを誤解しているようだ – Ian

1

使用ナビゲーションコントローラ

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

ちょっとChetan、答礼のおかげで!あなたのコードは多くを助けます!!! – Ian

関連する問題