Ios 从UITableViewController中的选定行获取选定标签文本
我对斯威夫特还是新手,所以请容忍我 目前我已经从一个JSON文件中加载了数据,然后显示在各个单元格中 我有一个自定义单元类,它有必要的标签插座(名称和编号) 我要做的是,在给定行上从指定的标签文本检索数据,然后将其传递到另一个ViewController e、 g.第3行有两个标签,“数据”和“2004”。我已经选择了第3行,希望获得该单元格的“2004”值,并将其分配给一个变量,然后该变量可以传递给另一个ViewController。(“2004”将被视为我的自定义单元格类别(即单元格编号)中的数字标签插座) 以下是一些可能会有所帮助的代码: 表视图控制器Ios 从UITableViewController中的选定行获取选定标签文本,ios,swift,uitableview,Ios,Swift,Uitableview,我对斯威夫特还是新手,所以请容忍我 目前我已经从一个JSON文件中加载了数据,然后显示在各个单元格中 我有一个自定义单元类,它有必要的标签插座(名称和编号) 我要做的是,在给定行上从指定的标签文本检索数据,然后将其传递到另一个ViewController e、 g.第3行有两个标签,“数据”和“2004”。我已经选择了第3行,希望获得该单元格的“2004”值,并将其分配给一个变量,然后该变量可以传递给另一个ViewController。(“2004”将被视为我的自定义单元格类别(即单元格编号)中
import UIKit
class TableViewController: UITableViewController, UINavigationControllerDelegate {
@IBOutlet var segmentedSortOption: UISegmentedControl!
var array : NSArray = DataClass.dataStruct.jsonResult["data"] as NSArray
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var myCell:cell = self.tableView.dequeueReusableCellWithIdentifier("cell") as cell
var upperCasedNames = array[indexPath.row]["name"] as? String
if segmentedSortOption.selectedSegmentIndex == 0 {
myCell.No.text = array[indexPath.row]["no"] as? String
} else if segmentedSortOption.selectedSegmentIndex == 1 {
if let unsortedEvents = DataClass.dataStruct.jsonResult["data"] as NSArray {
let descriptor = NSSortDescriptor(key: "name", ascending: true, selector: "caseInsensitiveCompare:")
let aToZ = unsortedEvents.sortedArrayUsingDescriptors([descriptor])
myCell.No.text = aToZ[indexPath.row]["no"] as? String
}
}
return myCell
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "selectedItem" {
if let indexPath = self.tableView.indexPathForSelectedRow() {
let destinationController = segue.destinationViewController as ViewController
destinationController.eventData = indexPath.row as Int
}
}
自定义单元格类
import UIKit
class cell: UITableViewCell {
@IBOutlet var name: UILabel!
@IBOutlet var number: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
如果你还有任何问题,请一定要问
如果你有更好的选择,也请提出建议
谢谢
编辑:忘记提到一个关键问题。有一个分段控件,它将数据从JSON文件中的给定顺序重新组织为字母顺序。在A-Z视图的实例中,indexath.row单元格变得毫无用处,因为顺序完全不同。在您的
prepareforsgue
中,您需要获取使用cellforrowatinexpath
选择的单元格(与tableView不同(tableView:UITableView,cellforrowatinexpath
)然后将其传递给目标控制器
,请参见以下示例:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "selectedItem" {
if let indexPath = self.tableView.indexPathForSelectedRow() {
// get the cell associated with the indexPath selected.
let cell = self.tableView.cellForRowAtIndexPath(indexPath) as cell!
// get the label text to pass to destinationController
var text1 = cell.name.text
var text2 = cell.number.text
let destinationController = segue.destinationViewController as ViewController
destinationController.eventData = indexPath.row as Int
}
}
}
我希望这能对你有所帮助。好吧,我对斯威夫特也不熟悉,所以请容忍我。我有几种方法可以做到这一点 1) 您是从JSON文件向这个tableview中抛出数据,对吗?因此,根据项目的结构,您可以单击索引(行)并使用它从JSON获取相关数据
let indexPath = tableView.indexPathForSelectedRow();
然后将该整数indexath传递给您用来获取相关数据的JSON解析库
2) 我不确定您的实现的自定义特性是如何改变事情的,但可能有您的答案
3) 更像是一个hack-y解决方案,但是当您填充这个UITableView时,您可以将每个单元格的标记设置为其索引,然后您就可以通过标记获取它并以这种方式检索它的标签值(如中所示) 感谢您的输入,但我最初使用的是您的第一个建议,但在新的A-Z排序之后,它使该函数变得多余。我还检查了第一个链接,这对我没有帮助,因为我使用的是自定义单元格类,但是第二个链接看起来在不久的将来会派上用场。谢谢:)当然,很抱歉我没有完全阅读/理解你的问题:)无论如何祝你好运!如果你按照我的第三个想法提出了一个解决方案,请随意建议将代码作为对答案的编辑,我将整合它。非常感谢!真不敢相信事情竟如此简单!!多多少少花了一整天的时间想弄明白这一点哈哈,再次感谢维克多,非常感谢:DGlad能帮助你。它总是一个很好的参考阅读苹果的TableView编程指南,即使是在Objective-C中!!,但你可以从指南中学到很多。讽刺的是,我使用了相同的代码,但把它放在了DidSelectRowatinex中,我甚至没有想到要把它放在那里;但确实有道理。从现在起,我一定会看看指南。再次感谢维克多:)