gpt4 book ai didi

ios - Swift:将数据传递到静态 TableView

转载 作者:行者123 更新时间:2023-11-28 05:53:05 24 4
gpt4 key购买 nike

我开始在 Apple 指南的帮助下学习 Swift:https://itunes.apple.com/it/book/app-development-with-swift/id1219117996

现在我被困在一个小问题上,我想了解如何解决,但从指南中看并不是很清楚。

情况是这样

enter image description here

这是一个简单的应用程序,显示带有描述的表情符号列表。点击 emoji-cell,它应该会打开静态表格 View 并显示表情符号的信息。

结果

来自指南

“You'll need to pass the Emoji object from EmojiTableViewController to the static table view controller when a cell is tapped. Start by creating a new file, and define a UITableViewController subclass called "AddEditEmojiTableViewController". Remember to delete or comment out any table view data source methods in the file. In Main.storyboard, set the static table view's "Custom Class" to "AddEditEmojiTableViewController". Add a property to the AddEditEmojiTableViewController class called emoji with a type of Emoji. Within the prepare(for segue:) method of EmojiTableViewController, you'll check the identifier, downcast the destination view controller, access the object(s) to pass, then assign the properties:”

AddEditEmojiTableViewController 文件

import UIKit

class AddEditEmojiTableTableViewController: UITableViewController {

override func viewDidLoad() {
super.viewDidLoad()

if let emoji = emoji{
symbolTextfield.text = emoji.symbol
nameTextfield.text = emoji.name
descriptionTextfield.text = emoji.description
usageDescription.text = emoji.usage
}

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

var emoji: Emoji! = nil

@IBOutlet weak var symbolTextfield: UITextField!
@IBOutlet weak var nameTextfield: UITextField!
@IBOutlet weak var descriptionTextfield: UITextField!
@IBOutlet weak var usageDescription: UITextField!

}

EmojiTableViewController 文件的prepare 函数,如指南中所述。 (EditEmoji 是从单元格到静态表格 View 的转场)

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "EditEmoji" {
let indexPath = tableView.indexPathForSelectedRow!
let emoji = emojis[indexPath.row]
let addEditEmojiTableViewController = segue.destination
as! AddEditEmojiTableViewController
addEditEmojiTableViewController.emoji = emoji
}
}

以这种方式保持准备功能,当我点击一个单元格时我有这个错误崩溃

Could not cast value of type 'UINavigationController' .. to 'Emoji.AddEditEmojiTableTableViewController' ....
... Could not cast value of type 'UINavigationController' ... to 'Emoji.AddEditEmojiTableTableViewController' ...

所以,在 stackoverflow 上,我以这种方式修改了函数,现在它可以工作了。

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "EditEmoji"{
let indexPath = tableView.indexPathForSelectedRow!
let emoji = emojis[indexPath.row]
let test1 = segue.destination as! UINavigationController
let test2 = test1.topViewController as! AddEditEmojiTableTableViewController
test2.emoji = emoji
}
}

所以我的问题是:指南错了吗?指南没有更新到最新的 Swift 版本吗?

最佳答案

指南需要更新,您不应该将 AddEditEmojiTableViewController 放在导航 Controller 中。如果您将 segue 直接从 EmojiTableViewController 连接到 AddEditEmojiTableViewController,它将按预期工作。

在您的第一个示例中,segue.destination 是一个 UINavigationController,它与 AddEditEmojiTableViewController 类无关。因此强制转换segue.destinationAddEditEmojiTableViewController` 总是会失败。

在代码的第二个片段中,它起作用了,因为它遵循 View Controller 树:test1 是导航 Controller ,它的根 vc 是 test2这是 AddEditEmojiTableViewController

关于ios - Swift:将数据传递到静态 TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52211721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com