如何使DetailView通过indexPath更改数据(How to make DetailView change data by indexPath)

编程入门 行业动态 更新时间:2024-10-24 13:22:17
如何使DetailView通过indexPath更改数据(How to make DetailView change data by indexPath)

我目前正在开发一个Master-DetailView应用程序,而且我仍然坚持如何改变数据....

我看到了一个关于如何做到这一点的精彩教程:

教程

但是那家伙正在使用一个空白的ViewController而我正在使用带有静态单元格的TableViewController,所以它不起作用。

我想手动输入数据

var Label1Data = ["You Tapped Cell 1,You Tapped Cell 2,You Tapped Cell 3"]

如果按下第一个单元格,第一个数据将显示在该标签中,它将通过索引路径显示在DetailView中...我知道在这里使用静态单元格并不理想,但我确实想要明智地使用它们。

如果有人能告诉我最终如何成功地将数据如上所述以及教程如何实现,那将是很棒的。

MasterViewController代码:

import UIKit import AVFoundation class BarsViewController: UITableViewController,UISearchResultsUpdating,UISearchBarDelegate,UISearchDisplayDelegate,UITabBarControllerDelegate{ @IBOutlet var tableViewController: UITableView! var audioPlayer = AVAudioPlayer() var sel_val : String? // TableView Data : struct User { var name: String var streetName: String var image: UIImage? } var allUsers: [User]! var filteredUsers: [User]! func createUsers(names: [String], streets: [String], images: [UIImage?]) -> [User] { var users = [User]() guard names.count == streets.count && names.count == images.count else { return users } for (index, name) in names.enumerated() { let user = User(name: name, streetName: streets[index], image: images[index]) users.append(user) } return users } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if tableView == self.tableView { return self.names.count } else { return self.filteredUsers.count } } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ let cell = self.tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell let user:User! if tableView == self.tableView { user = allUsers[indexPath.row] } else { user = filteredUsers[indexPath.row] } cell.photo.image = user.image cell.name.text = user.name cell.streetName.text = user.streetName return cell } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ let object = self.storyboard?.instantiateViewController(withIdentifier: "BarProfileTableViewController") as! BarsProfile let user:User! if tableView == self.tableView { user = allUsers[indexPath.row] } else { user = filteredUsers[indexPath.row] } print("username : \(user.name)") print("streetName : \(user.streetName)") MyIndex = indexPath.row object.barImage = user.image! object.barName = user.name object.streetName = user.streetName self.navigationController?.pushViewController(object, animated: true) }

DetailView的代码:

import UIKit import AVFoundation import MapKit class BarsProfile: UITableViewController,MKMapViewDelegate { @IBOutlet var Distance: UILabel! @IBOutlet var headerImage: UIImageView! @IBOutlet var OnlineMenu: UIButton! @IBOutlet var Address: UILabel! @IBOutlet var ProfileMapView: MKMapView! @IBOutlet var BarNameLBL: UILabel! @IBOutlet var streetNameLBL: UILabel! @IBOutlet var MusicLabel: UILabel! @IBOutlet var KindOfBarCell: UITableViewCell! var barName = String() var barImage = UIImage() var streetName = String() override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(true) BarNameLBL.text = barName streetNameLBL.text = streetName navigationItem.title = barName }

看起来如何:(红线是我想手动输入数据的标签)

I'm currently working on a Master-DetailView application and I'm stuck on how to make the data change....

I saw a great tutorial on how to do this :

Tutorial

But the guy is using a blank ViewController & I'm using a TableViewController With static Cells,So it doesn't work.

I want to put the data manually like

var Label1Data = ["You Tapped Cell 1,You Tapped Cell 2,You Tapped Cell 3"]

and it will show in the DetailView by the index path if i pressed the first cell the first data will show up in that Label...i know its not ideal to use static cells here but i do wanna use them design wise.

It will be great if any one could show me finally how can i put the data successfully like i said above and how the Tutorial does it.

MasterViewController Code:

import UIKit import AVFoundation class BarsViewController: UITableViewController,UISearchResultsUpdating,UISearchBarDelegate,UISearchDisplayDelegate,UITabBarControllerDelegate{ @IBOutlet var tableViewController: UITableView! var audioPlayer = AVAudioPlayer() var sel_val : String? // TableView Data : struct User { var name: String var streetName: String var image: UIImage? } var allUsers: [User]! var filteredUsers: [User]! func createUsers(names: [String], streets: [String], images: [UIImage?]) -> [User] { var users = [User]() guard names.count == streets.count && names.count == images.count else { return users } for (index, name) in names.enumerated() { let user = User(name: name, streetName: streets[index], image: images[index]) users.append(user) } return users } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if tableView == self.tableView { return self.names.count } else { return self.filteredUsers.count } } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ let cell = self.tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell let user:User! if tableView == self.tableView { user = allUsers[indexPath.row] } else { user = filteredUsers[indexPath.row] } cell.photo.image = user.image cell.name.text = user.name cell.streetName.text = user.streetName return cell } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ let object = self.storyboard?.instantiateViewController(withIdentifier: "BarProfileTableViewController") as! BarsProfile let user:User! if tableView == self.tableView { user = allUsers[indexPath.row] } else { user = filteredUsers[indexPath.row] } print("username : \(user.name)") print("streetName : \(user.streetName)") MyIndex = indexPath.row object.barImage = user.image! object.barName = user.name object.streetName = user.streetName self.navigationController?.pushViewController(object, animated: true) }

DetailView's Code:

import UIKit import AVFoundation import MapKit class BarsProfile: UITableViewController,MKMapViewDelegate { @IBOutlet var Distance: UILabel! @IBOutlet var headerImage: UIImageView! @IBOutlet var OnlineMenu: UIButton! @IBOutlet var Address: UILabel! @IBOutlet var ProfileMapView: MKMapView! @IBOutlet var BarNameLBL: UILabel! @IBOutlet var streetNameLBL: UILabel! @IBOutlet var MusicLabel: UILabel! @IBOutlet var KindOfBarCell: UITableViewCell! var barName = String() var barImage = UIImage() var streetName = String() override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(true) BarNameLBL.text = barName streetNameLBL.text = streetName navigationItem.title = barName }

How it looks like : ( Red line is a label i would like to put data manually in)

最满意答案

你不能使用TableViewController为您的目的。 相反,您可以使用带有标签和文本字段的普通ViewController 。

在此处输入图像描述

在上面的图片中,您可以使用width = 1和color = lightGrey的简单label ,这样您就可以获得与tableview中相同的分隔线。

you cant use a TableViewController for your purpose. Instead you can use a normal ViewController with labels and textfields.

enter image description here

In the above picture of yours, you can use a simple label of width = 1 and color = lightGrey so that you can get the same separator line as in the tableview.

更多推荐

本文发布于:2023-08-07 19:41:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1465535.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据   indexPath   DetailView   change   data

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!