gpt4 book ai didi

ios - 如何以编程方式添加 segue?

转载 作者:可可西里 更新时间:2023-11-01 00:23:12 26 4
gpt4 key购买 nike

我知道,我知道这个问题已经很多 次了。我也找到了 this question,但它建议的解决方案对我不起作用。

我只是想构建一个应用程序来演示如何在 UIKit 中使用这些东西(以防我以后想使用它们。我可以复制代码)。

我已经创建了一个包含 TableView 的 View Controller 。我编写了一个名为 PrototypeTableController 的类作为我在 Storyboard中创建的 View Controller 的 View Controller 类。

当用户点击其中一个单元格时,我希望显示另一个 View Controller ,称为 Prototype Table Content。如果您点击不同的单元格,将显示不同的文本。

在storyboard中,是这样的:

enter image description here

当用户点击不同的单元格时,Prototype Table Content 中的标签文本会有所不同。这意味着我需要将数据从一个 View Controller 发送到另一个 View Controller 。

上面提到的帖子建议我应该给 segue 一个标识符,所以我做了:

enter image description here

这是我的代码:

TableView 的 View Controller 类:

class PrototypeTableController: UIViewController, UITableViewDataSource, UITableViewDelegate {
let data = ["Cell1", "Cell2", "Cell3", "Cell4", "Cell5"]
let contents = ["Hello", "Nice", "OMG", "Jesus", "Peace"]
var content: String?

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = data[indexPath.row]
return cell
}

func tableView(tableView: UITableView, titleForFooterInSection section: Int) -> String? {
return "This is a prototype table view created by Sweeper"
}

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return "my table"
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
content = contents[indexPath.row]
tableView.deselectRowAtIndexPath(indexPath, animated: true)
performSegueWithIdentifier("showContent", sender: tableView)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showContent" {
let destination = segue.destinationViewController as! PrototypeTableContentViewController
destination.contentString = content
}
}
}

Prototype Table Content View 的 View Controller 类:

class PrototypeTableContentViewController: UIViewController {
@IBOutlet var tableContent: UILabel!
var contentString: String?

override func viewDidLoad() {
super.viewDidLoad()
tableContent.text = contentString
}
}

我想我做了上面提到的帖子中建议的所有事情。我添加了一个标识符,我调用了 performSegueWithIdentifier,我还取消了点击后的单元格。

但是,它不会转到另一个 View Controller !它保持在同一个 Controller 上!像这样:

enter image description here

最佳答案

When the user taps on one of the cells, I want another view controller to show, called Prototype Table Content. And different text will be shown if you tap on different cells.

虽然您可以通过编程方式调用 performSegueWithIdentifier,但 Storyboard可以自动为您处理很多工作。只需使用 show Storyboard从您的原型(prototype)单元格转到 PrototypeTableContentViewController

prepareForSegue 知道您选择了哪个单元格,因为该单元格是发件人。您所要做的就是设置目标 View Controller 的 contentString。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
guard let controller = (segue.destinationViewController as? PrototypeTableContentViewController where segue.identifier == "showContent", let cell = sender as? UITableViewCell, textLabel = cell.textLabel else {
return
}

controller.contentString = textLabel.text
}

这与像 Master-Detail 这样的模板从单元格中分离出来以显示有关单元格的详细信息的方式非常相似(尽管 Apple 使用 indexPathForSelectedRow 来传递单元格的详细信息):

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showDetail" {
if let indexPath = self.tableView.indexPathForSelectedRow {
let object = objects[indexPath.row] as! NSDate
let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController
controller.detailItem = object
controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
controller.navigationItem.leftItemsSupplementBackButton = true
}
}
}

无论哪种情况,SDK 都会为您执行 Storyboard转场;不需要以编程方式添加或执行 segue。

关于ios - 如何以编程方式添加 segue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34494974/

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