将值选定单元格传递给另一个ViewController

时间:2015-11-13 15:01:51

标签: arrays swift2

我有两个ViewControllers。对于第一个ViewController,它在表上显示我的Array数据。我想获取所选单元格的indexPath,并将此数据传递给另一个ViewController。

在我的第一个ViewController中

import UIKit

class ViewController: UIViewController, UITableViewDataSource {
var nameList = [NameManager]()

    @IBOutlet weak var NameTable: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        NameTable.dataSource = self
        GetData()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    func GetData(){
        let session = NSURLSession.sharedSession()
        let request = NSMutableURLRequest(URL: NSURL(string: "http://www.json-generator.com/api/json/get/bPfifKWNaq?indent=2")!)
        request.HTTPMethod = "GET"

        let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in

            if let error = error {
                print(error)
            }
            if let data = data{
                do{
                    let resultJSON = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions())
                    let resultArray = resultJSON as? NSArray
                    for jsonObjectString in resultArray!{
                        let code = jsonObjectString["code"] as! String
                        let name = jsonObjectString["name"] as! String
                        let description = jsonObjectString["description"] as! String
                        self.nameList.append(NameManager(code: code, name: name, description: description))
                    }
                    self.nameList.count
                    dispatch_async(dispatch_get_main_queue(), {
                        self.NameTable.reloadData()
                    })
                }catch _{
                    print("Received not-well-formatted JSON")
                }

            }
            if let response = response {
                let httpResponse = response as! NSHTTPURLResponse
                print("response code = \(httpResponse.statusCode)")
            }

        })
        task.resume()

    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
        let count = nameList.count
        return count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
        let myCell = NameTable.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as UITableViewCell

        myCell.textLabel?.text = nameList[indexPath.row].name
        myCell.detailTextLabel?.text = nameList[indexPath.row].description

        return myCell
    }

在我的第二个ViewController中,它也是另一个类,我想捕获所选内容的indexPath。使用索引值,我搜索我的Array并将该特定对象传递给下一个类。我没有这方面的代码,因为我不知道它是如何工作的。

2 个答案:

答案 0 :(得分:0)

您可以在类的范围之外创建属性,然后在cellForRowAtIndexPath方法中设置该属性。可以在第二个视图控制器中访问该属性。您将需要查看tableview方法didSelectRowAtIndexPath,因为这将是您将属性设置为已选择的单元格的位置。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
appDelegate().index = indexPath.row
}

我做了一个非常简单的project on github,显示了在视图控制器范围之外创建属性的两种方法。一种方法是在AppDelegate内创建一个通过单例访问的变量,另一种方法是Globals.swift文件。

希望这有帮助!

答案 1 :(得分:0)

如果你想将值传递给点击单元格后弹出的控制器,使用单例并不是一种优雅的方式。如果您使用的是故事板,那么您必须使用'准​​备segue'。您可以在处理传输的类中实现该方法,并在另一个视图控制器中设置所有属性。

void foo(uint64_t *dst, uint64_t *src)
{
    __asm (
        "movq (%[in]), %%rax\n"
        "addq %%rax, (%[out])\n"
        "movq 8(%[in]), %%rax\n"
        "adcq %%rax, 8(%[out])\n"
        "movq 16(%[in]), %%rax\n"
        "addq %%rax, 16(%[out])\n"
        "movq 24(%[in]), %%rax\n"
        "adcq %%rax, 24(%[out])\n"
        :
        : [in] "r" (src), [out] "r" (dst)
        : "%rax"
    );
}