Swift: 如何根据按下的单元格从数据库中获取记录

Swift: How can I get the records from the database according to the cell pressed

是否可以在按下 UItableViewCell 时从外部数据库获取数据?

我设法创建了一个 UItable视图,我在其中显示数据库中的数据。如果我按下一个单元格,那么应该显示所有链接到它的数据。例如。如果我在数据库中有 4 个主要类别,例如 TOOLS、OTHERS、SECURITY、PETS,并且每个类别都有其子类别并且在数据库中相互链接。所以如果我点击宠物,它应该过滤掉并且只显示猫、狗、牛、狮子。当我 运行 这个 SQL 我能够得到信息,但无法在 Swift 上弄清楚。

UItableViewCell 在我的 FirstviewController 及其 Main Category 中。 当我单击此处时,它会转到我的目的地 VC 并在此处再次显示 table。enter image description here

DestViewController 是子类别 enter image description here

我的CategoryList_ViewController.swift

  import Foundation
    import UIKit
    import WebKit

    class CategoryList_ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!

    @IBAction func refresh(sender: AnyObject) {

        get()
    }
    var values:NSArray = []

    override func viewDidLoad() {
        super.viewDidLoad()
        get();
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func get(){
        let url = NSURL(string: "c:\deskstop\mobiletec\assignment\assignment2\cat.php")
        let data = NSData(contentsOfURL: url!)
        values = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSArray
        tableView.reloadData()
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return values.count;
    }


    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CategoryList_TableViewCell
        let maindata = values[indexPath.row]
        cell.categoryLabel.text = maindata["NAME"] as? String
        return cell;

    }



    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "catView" {
            if let indexPath = self.tableView.indexPathForSelectedRow  {
                let value = values[indexPath.row]
                let controller = segue.destinationViewController as! SubCatergory_ViewController
                controller.cate_Id = value["id"] as! String
                controller.catTitleRec = value["NAME"] as! String
        }
     }
    }
    }

我的SubCatergory_ViewController.swift

import Foundation
import UIKit
import WebKit

class SubCatergory_ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource  {

@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var caID: UILabel!

@IBOutlet weak var catTitle_Label: UILabel!
@IBAction func refresh(sender: AnyObject) {

    get()
}
var values:NSArray = []

 var catTitleRec  = ""
 var cate_Id = ""

override func viewDidLoad() {
    super.viewDidLoad()

    catTitle_Label.text = catTitleRec
    caID.text = cate_Id
    get();
}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func get(){
    let request = NSMutableURLRequest(URL: NSURL(string: "c:\deskstop\mobiletec\assignment\assignment2\subcat.php")!)
    request.HTTPMethod = "GET"
    let postString = "a=\(cate_Id)"
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
        data, response, error in

        if error != nil {
            print("error=\(error)")
            return
        }

        print("response = \(response)")

        let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
        print("responseString = \(responseString)")
    }
    task.resume()
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return values.count;
}



func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! subCateListTableViewCell
    let maindata = values[indexPath.row]
    cell.categoryLabel.text = maindata["NAME"] as? String
    return cell;

}


}

和我的subcat.php

<?php

    $connection = mysql_connect(........);

    $catefilter = $_GET['a'];
    if(!$connection){
        die('Connection Failed');
    }
    else{
        $dbconnect = @mysql_select_db($database_UNIASSIGNMENT, $connection);

        if(!$dbconnect){
            die('Could not connect to Database');
        }
        else{
            $query = 'SELECT category_group.group_id , category.NAME FROM category_group LEFT JOIN category ON category.id = category_group.category_id WHERE category_group.group_id =' . $catefilter ;
            $resultset = mysql_query($query, $connection);

            $records= array();

            while($r = mysql_fetch_assoc($resultset)){
                $records[] = $r;
            }

            echo json_encode($records);
        }
    }
?>

我的第一个 VC 工作正常但我的第二个 VC 没有获取数据

感谢您的宝贵时间:)

SK

要访问被按下的单元格,需要调用didSelectRowAtIndexPath函数。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let value = values[indexPath.row]

    let vc = storyboard?.instantiateViewController(withIdentifier: "SubCatergory_ViewController") as! SubCatergory_ViewController

    vc.cate_Id = value["NAME"] as! String
    //self.navigationController?.pushViewController(vc, animated: true)
    self.present(vc, animated: true, completion: nil)
}

首先,您从 indexPark.row 上的 values 数组中获取 value。然后实例化第二个 viewController

然后将 cate_Id 的字符串值设置为项目 value 所需的字符串值。然后你只需要展示新的 viewController.

如果您正在使用 UINavigationController 并且您想要一个 "back" 按钮,那么您可以使用:self.navigationController?.pushViewController(vc, animated: true)

如果您只想显示 viewController,您可以使用 self.present(vc, animated: true, completion: nil)

评论或取消评论您喜欢的任何演示方法。