gpt4 book ai didi

ios - 如何为不同的 UTableView 部分使用不同的 segues 并传递数据

转载 作者:行者123 更新时间:2023-11-28 10:19:41 26 4
gpt4 key购买 nike

我正在使用一个包含两个部分的 UITableView,我使用一个名为 sections 的数组作为部分标题标题,以及一个名为 sectionItems 的数组它包含两个字符串值数组来填充这些部分。

let sections = ["Section 1", "Section 2"]

var sectionItems = [ ["One","Two", "Three", "Four"], ["Another One"] ]

UITableView 可以很好地显示数据,但是当用户选择一个 TableView 单元格时,我试图继续。问题是我对两个不同的部分有两个不同的segues。

如何将每个 segue 用于适当的部分?

这是我尝试过的,

 override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell

tableView.deselectRowAtIndexPath(indexPath, animated: true)


//Optional error occurs here for section property
let section = self.tableView.indexPathForSelectedRow!.section

if section == 0 {
self.performSegueWithIdentifier("sectionOneSegue", sender: cell)
} else if section == 1 {
self.performSegueWithIdentifier("sectionTwoSegue", sender: cell)
}

}

然而,这在声明属性部分时给我一个可选错误。

此外,当启动 segue 时,我正在尝试将相关数据传递给细节 Controller 。

在这里,我试图确保在 sectionItems 数组中我使用数组中的第一个数组,方法是使用节号,然后是所选单元格行的确切字符串值。

    if segue.identifier == "sectionOneSegu" {

let navController = segue.destinationViewController as! UINavigationController
let detailController = navController.topViewController as! DetailViewController
var row = self.tableView.indexPathForSelectedRow!.row


detailController.upcomingType = sectionItems[1][row]
detailController.mode = 1

}

我不确定这是否正确。有人可以帮我解决为什么在选择单元格行时发生错误以及如何修复它以使用正确的 segue 吗?我怎样才能传递相关数据?

最佳答案

首先,您不需要在“didSelectRowAtIndexPath”方法中获取单元格,因此您创建对单元格的引用的第一行是不必要的。

您有一个索引路径,其中包含行和部分索引,使用它从您的 sectionItems 数组中获取数据,例如

let data = sectionItems[indexPath.section][indexPath.row]

switch indexPath.section {
case 0:
self.performSegueWithIdentifier("sectionOneSegue", sender: data)
case 1:
self.performSegueWithIdentifier("sectionTwoSegue", sender: data)
default:
break
}

这应该是您在该方法中所需要的全部。

然后您可以覆盖 prepareForSegue 方法并检查 segue.identifier 属性以查看执行了哪个 segue 并从那里提取 destinationViewController。拥有 View Controller 后,您可以通过 View Controller 上的属性将数据传递给它。

if segue.identifier == "sectionOneSegue" {

guard let data = sender as? String,
newViewController = segue.destinationViewController as? NewViewController else {
return
}

newViewController.data = data
}

在上面的代码中,我确保发送方是预期的数据类型(从上面的 performSegueWithIdentifier 方法发送的数据类型)并且目标 Controller 是我想要的,然后一旦我知道一切都是正确我正在使用我要发送给它的数据设置目标 Controller 上的属性。

希望对您有所帮助。

关于ios - 如何为不同的 UTableView 部分使用不同的 segues 并传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36600499/

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