我对 Swift 还很陌生,所以请耐心等待。
目前,我已从 JSON 文件加载数据,然后将其显示到各个单元格上。
我有一个自定义单元类,它具有必要的标 checkout 口(名称和编号)。
我想要做的是在给定行上从指定标签文本中检索数据,然后将其传递到另一个 ViewController。
例如第 3 行有两个标签:“Data”和“2004”。我选择了第 3 行,并希望获取此单元格“2004”值并将其分配给一个变量,然后将该变量传递给另一个 ViewController。 (“2004”将被视为我的自定义单元类中的数字标 checkout 口,即 cell.number)
这里是一些可能有帮助的代码:
表格 View Controller
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 文件中的给定顺序重新组织为字母顺序。由于顺序完全不同,单元格 indexPath.row 在 A-Z View 的实例中变得无用。
最佳答案
在您的 prepareForSegue
中,您需要获取使用 cellForRowAtIndexPath
选择的单元格(与 tableView(tableView: UITableView, cellForRowAtIndexPath
不同) )并将其传递给 destinationController
,请参阅以下示例:
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
}
}
}
希望这对您有帮助。
关于ios - 从 UITableViewController 中的选定行获取选定的标签文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31998943/