我目前正在开发一个 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
}
它看起来像什么:(红线是我想手动放入数据的标签)
最佳答案
您不能将 TableViewController
用于您的目的。相反,您可以使用带有标签和文本字段的普通 ViewController
。
在你上面的图片中,你可以使用一个简单的 label
width = 1
和 color = lightGrey
这样你就可以得到与 TableView 中相同的分隔线。
关于ios - 如何让DetailView通过indexPath改变数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43449340/