あるビューコントローラーから別のビューコントローラーに値を渡そうとしています。テストしたところ、これは問題なく、自分のコードで動作します。しかし、私はセルラベル値を取ろうとしているときに問題があります。私はgoogleとstackoverflowで見つけたすべてを試しましたが、これに関する答えはありません。 // I THINK THE PROBLEM IS ON THE NEXT LINE OF CODE
というコードにコメントを追加して、どこにいらっしゃいましたかわかりやすくしています。UITableViewCellからラベル値を取得できません
マイコード:あなたがcellForRowAtで行うようにあなただけのデータストアから生の値を使用していないのはなぜ
import UIKit
class PlacesTableViewController: UITableViewController {
@IBOutlet weak var placesTableView: UITableView!
var places = [Places]()
var valueToPass:String!
let cellIdentifier = "PlacesTableViewCell"
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
// Table view cells are reused and should be dequeued using a cell identifier.
guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? PlacesTableViewCell else {
fatalError("The dequeued cell is not an instance of PlacesTableView Cell.")
}
let place = places[indexPath.row]
cell.placeLabel.text = place.name
cell.ratingControl.rating = place.rating
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
print("You selected cell #\(indexPath.item)!")
let indexPath = placesTableView.indexPathForSelectedRow
// I THINK THE PROBLEM IS ON THE NEXT LINE OF CODE
let currentCell = placesTableView.cellForRow(at: indexPath!)! as UITableViewCell
print(currentCell.detailTextLabel?.text ?? "Failed to use Cell Label")
valueToPass = currentCell.detailTextLabel?.text ?? "Failed to use Cell Label"
performSegue(withIdentifier: "ShowCommentsTableViewController", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "ShowCommentsTableViewController") {
// initialize new view controller and cast it as your view controller
let viewController = segue.destination as! CommentsTableViewController
// will be stored in passedValue on the CommentsTableViewController
viewController.passedValue = valueToPass
//print (viewController.passedValue ?? "")
}
}
}
セルではなくデータソースを使用してください。また、古典的な 'UITableViewCell'ではなく' PlacesTableViewCell'を使用しています。 'detailTextLabel'ではなく' UILabel'として 'placeLabel'を使用しています。 – Larme
'places'配列を使ってデータを取得するだけで、既にdidSelectメソッドにindexPathがあります。 – Aks
ヒント#1:Scriptableの答えに従ってください。ヒント#2:あなたが見つけたものを読んで理解してから、それを実装してください。あなたがそれを理解していないなら、コピー/ペーストされたコードを叩くことはあなたをどこにでも連れて来ないでしょう。 – DonMag