如何使DetailView通过indexPath更改数据

时间:2017-04-17 10:05:29

标签: ios swift uitableview master-detail

我目前正在使用Master-DetailView应用程序而且我一直在研究如何更改数据....

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

Tutorial

但这家伙正在使用一个空白的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


    }

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

enter image description here

1 个答案:

答案 0 :(得分:1)

您无法使用TableViewController来达到目的。相反,您可以使用标准和文本字段的普通ViewController

enter image description here

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