我正在尝试创建一个应用,以便在按下UITableView
中的单元格时,它会打开一个新的ViewController
,其中包含之前在单击的初始单元格中使用的相同图像和标签。
let alligator:NSArray = ["American Alligator","American Crocodile","Mugger Crocodile","Saltwater Crocodile"]
以下是numberOfRowsInSection and cellForRowAt
:
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return(alligator.count)
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell4 = tableView.dequeueReusableCell(withIdentifier: "cell4", for: indexPath) as! AlligatorViewCell
cell4.alligatorImage.image = UIImage.init(named: alligator[indexPath.row] as! String + ".jpg")
cell4.alligatorLabel.text = alligator[indexPath.row] as? String
return(cell4)
}
以下是我的详细视图控制器的出口:
@IBOutlet var detailImage: UIImageView!
@IBOutlet var detailLabel: UILabel!
这是didSelectRowAt
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
detailImage.image = UIImage.init(named: alligator[indexPath.row] as! String + ".jpg")!
detailLabel.text = alligator[indexPath.row] as? String
问题是,当我按下单元格时,我收到错误fatal error: Unexpectedly found nil while Unwrapping Optional
答案 0 :(得分:1)
我相信您的错误正在发生,因为调用它时detailImage
不存在。
据我所知,这些插座位于基本视图控制器中,但它们指的是详细视图控制器中的对象,这是不允许的。因此,当你试着打电话给他们时,他们不会传递任何值为零的东西。
因此,它不是关于UIImage的初始化。
您需要在detailViewController类中创建IBOutlets,然后通过prepareForSegue
函数将值从您的单元格传递到这些出口。
如果您对此有疑问,请与我们联系。
修改
让我们说你的详细视图控制器有detailImage属性,那么你可以这样做(在你的基础ViewController中)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let controller = segue.destination as! UIViewController //your detail controller
controller.detailImage = myImage //where myImage is a property of your base view controller
}
修改强>
您可以在按照之前尝试过的单元格时在视图控制器中设置myImage属性。然后可以将myImage设置为prepareForSegue func中的detailImage。所以像这样:
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
myImage = UIImage.init(named: alligator[indexPath.row] as! String + ".jpg")!
...
修改强>
你应该像这样使用myImage
:
var myImage: UIImage?
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
myImage = UIImage.init(named: alligator[indexPath.row] as! String + ".jpg")!
...