swift - 如何从选定的表格视图单元格中检索文本?
问题描述
我想从 tableview 的选定单元格中检索文本以修改其他视图控制器中的标签。我的第一个问题是我没有成功检索值并在放置它之后
这是我的表格视图文件:
class SelectionMarqueViewController: UITableViewController {
var posts = [Post]()
var indexMarques = 0
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
loadMarques()
}
func loadMarques() {
var ref : DatabaseReference?
ref = Database.database(url: "https://myride-test.firebaseio.com/").reference()
ref?.observe(.childAdded, with: { (snapshot) in
if let dict = snapshot.value as? [String: Any] {
let marqueText = dict["Marque"] as! String
let post = Post(marqueText: marqueText)
self.posts.append(post)
//print(self.posts)
self.tableView.reloadData()
}
if let dict = snapshot.value as? [String: Any] {
let marqueText = dict["Marque"] as! String
let post = Post(marqueText: marqueText)
self.posts.append(post)
self.posts = Array(Set(self.posts))
self.tableView.reloadData()
}
})
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return posts.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "PostCell", for: indexPath)
let orderPosts = self.posts.sorted { $0.marque < $1.marque}
cell.textLabel?.text = orderPosts[indexPath.row].marque
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
indexMarques = indexPath.row
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
var selectionMarque = segue.destination as! ChoiceGeneralTableViewController
}
}
我的帖子文件:
class Post : Hashable {
var marque: String
init(marqueText: String) {
marque = marqueText
}
// Equatable for contains
static func == (lhs:Post,rhs:Post) -> Bool {
return lhs.marque == rhs.marque
}
// Hashable for Set
var hashValue:Int {
return marque.hashValue
}
}
然后我的标签必须更改的视图文件:
class ChoiceGeneralTableViewController: UITableViewController {
@IBOutlet weak var marquePressed: UILabel!
@IBOutlet weak var labelMarque: UILabel!
var marqueSelected = posts[indexMarques]
override func viewDidLoad() {
super.viewDidLoad()
labelMarque.text = marqueSelected
}
}
实际上我没有成功检索单元格的文本,self.posts 返回 ProjectName.Post
感谢您的研究和帮助!
解决方案
tableView.indexPath(for:)
您可以使用方法获取发件人索引路径
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let indexPath = tableView.indexPath(for: sender as UITableViewCell);
var selectionMarque = segue.destination as! ChoiceGeneralTableViewController
selectionMarque.selected = orderPosts[indexPath.row]
}
然后您需要更改posts[indexMarques]
为,: Post!
因为该类无权访问帖子数组,我们需要直接传递选定的 Post 对象。
class ChoiceGeneralTableViewController: UITableViewController {
@IBOutlet weak var marquePressed: UILabel!
@IBOutlet weak var labelMarque: UILabel!
var selected: Post!
override func viewDidLoad() {
super.viewDidLoad()
labelMarque.text = selected.marque
}
}
推荐阅读
- php - woocommerce分类法ajax过滤器,获得正确的分页
- java - 在onActivityResult中分别上传两张图片
- python - Python3:变量赋值,名称中的下划线在 Pycharm 中产生奇怪的行为
- tensorflow - tensorflow tf.maximum(0, x) 返回错误
- http - NiFi:GetHTTP处理器正则表达式无效错误
- node.js - 如何处理表单动作的响应?
- flutter - 相同的代码,两种不同的结果 | 在颤动中导航到另一条路线
- sql - 使用两个 AS 变量调用 table 并在 table 只有一行数据时比较它们
- python - 记录时出现多条消息
- javascript - AJAX 请求向用户显示内容但不在页面源上