如何让DetailView通过indexPath改变数据

How to make DetailView change data by indexPath

我目前正在开发 Master-DetailView 应用程序,但我一直在研究如何更改数据....

我看到了有关如何执行此操作的精彩教程:

Tutorial

但是那家伙用的是空白 ViewController 而我用的是带有静态单元格的表ViewController,所以它不起作用。

我想像这样手动放数据

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

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

如果最后有人能告诉我如何像我上面说的那样成功地放置数据以及教程是如何做到的,那就太好了。

硕士ViewController代码:

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

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