gpt4 book ai didi

ios - Swift - 在 TableViewController -> ViewControllers 之间的简单 Segue 期间出错

转载 作者:行者123 更新时间:2023-11-28 07:55:44 25 4
gpt4 key购买 nike

我正在尝试使用 TableViewController 和 ViewController 之间的 segue 传递两个字符串值,其中包含“Bar Name”及其各自的“Street Name”的值。我正在使用一个名为 HomeController 的类和另一个名为 BarPage 的类。我为主屏幕准备了以下代码,它是一个 TableView Controller 持有单元格,单击时应该执行我在 Storyboard上包含的转场。我删除了一些多余的代码来解释这个问题:

import UIKit
import Firebase

class HomeController: UIViewController, UITableViewDelegate, UITableViewDataSource{

let barsArray = [Data(image: "bar1", street: "123 North Street"),
Data(image: "bar2", street: "345 South Street"),
Data(image: "bar3", street: "678 West Street")]

let tableView: UITableView = {
let tv = UITableView()
tv.separatorStyle = .none
tv.allowsSelection = true
return tv
}()

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return barsArray.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! BarCell

cell.barImageView.image = UIImage(named: barsArray[indexPath.item].image!)
cell.barCoverLabel.text = "Street: " + barsArray[indexPath.item].street!

return cell
}

var locationName : String?
var locationStreet : String?

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let barPage = segue.destination as! BarPage
barPage.barName = locationName!
barPage.barStreet = locationStreet!
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {


locationName = self.barsArray[indexPath.row].image
locationStreet = self.barsArray[indexPath.row].street


// WHEN USER PRESSES A ROW, PERFORM SEGUE

performSegue(withIdentifier: "mySegue", sender: self)

// Then enter the second view controller

present(BarPage(), animated: true, completion: nil)


}



override func viewDidLoad() {
super.viewDidLoad()
self.tableView.backgroundColor = .black
setUpTableView()

}
func setUpTableView(){
tableView.dataSource = self
tableView.delegate = self
tableView.register(BarCell.self, forCellReuseIdentifier: "cell")

view.addSubview(tableView)

.... add anchors and constraints for table view ..........
}

}

var home: HomeController?

class BarCell: UITableViewCell{


... add custom styling for each cell of the table view ....

override init(style: UITableViewCellStyle, reuseIdentifier: String?){
super.init(style: style, reuseIdentifier: reuseIdentifier)
setup()
}

func setup(){
.......... add anchors and constraints for the cell..........
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

这是来自 View Controller BarPage 的代码,应该从他的 segue 中检索字符串。

import UIKit
import Firebase



class BarPage: UIViewController{

let homeController = HomeController()

// These, in theory, should be the variables that retrieve the strings through my segue

var barName = String()
var barStreet = String()

public let barStreet: UILabel = {
var label = UILabel()
label.text = "The street is: "// + barStreet
label.textColor = .black
label.font = UIFont.boldSystemFont(ofSize: 16)
return label
}()
let barImage: UIImageView = {
let iv = UIImageView()
iv.image = UIImage(named: barName) // Should retrieve the image based on the string that is passed
iv.contentMode = .scaleAspectFill
iv.backgroundColor = .yellow
//iv.clipsToBounds = true
return iv
}()

override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.mint()

view.addSubview(barStreet)
view.addSubview(barImage)

positionElements()

}

func positionElements(){
.......... add anchors and constraints for the elements..........
}
}

如果我在不包含 segue 的情况下运行我的代码,转换工作正常。但是,如果我包含 Segue,则会出现以下错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: 'Receiver (<ProjectName.HomeController: 0x7f9fcec0fb10>) has
no segue with identifier 'mySegue''

如果我的 Storyboard中确实有一个带有该标识符的 segue,这怎么可能呢?这是我的 Storyboard的图片,其中显示了我正在使用的标识符:

enter image description here

如您在右侧所见,相同的标识符与我 Storyboard中的 segue 匹配,但我的错误表明找不到它。我该如何解决这个问题?发生这种情况是因为我试图从 TableViewController 执行 Segue 吗?对于任何含糊之处,我深表歉意,成为 Swift 用户的第一个月。任何能为我指明正确方向的提示/建议都将非常有帮助。

最佳答案

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)  {
performSegue(withIdentifier: "mySegue", sender: indexPath.row)
}

关于ios - Swift - 在 TableViewController -> ViewControllers 之间的简单 Segue 期间出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48129574/

25 4 0
文章推荐: css - 我怎样才能在自适应布局中保持对齐
文章推荐: ios - 如何将 realm.objects(SomeObject.self).filter() 传递给需要 Results 的函数