通过 swift xcode 中的视图发送数据

Sending data through views in swift xcode

我正在尝试通过视图控制器发送数据。

如果我点击一个单元格,我有一个 segue 将我转移到另一个视图控制器。我有一个标签,我想根据单击的单元格中的文本进行更改。

这是我目前的代码:

import UIKit

class FirstViewController: UIViewController{

var storedString = String()

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
    tableView.deselectRowAtIndexPath(indexPath, animated: true)

    var venue : VenueItems

    if (tableView == self.searchDisplayController?.searchResultsTableView)
    {
        venue = self.filteredVenues[indexPath.row]
        var name = venue.name
        storedStadiumSelected = name
    }
    else
    {
        venue = self.venuesArray[indexPath.row]
        var name = venue.name
        storedStadiumSelected = name
    }


    println(storedStadiumSelected)

}

中间的代码...

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    var nextViewController: SelectBookingTypeViewController = segue.destinationViewController as SelectBookingTypeViewController

    nextViewController.recievedStadiumSelected = storedStadiumSelected

}

我的第二个视图控制器如下所示: 导入 UIKit

class SelectBookingTypeViewController: UIViewController {

@IBOutlet weak var stadiumLabel: UILabel!

var recievedStadiumSelected = String()


override func viewWillAppear(animated: Bool) {
    stadiumLabel.text = recievedStadiumSelected
}

这段代码的问题是我只加载了我之前点击的选项。因此,例如,如果我单击 'item1',标签文本什么也没有。 但是如果我返回并单击 'item2',标签现在是 item1。我不知道为什么会这样!

我对编码比较陌生,所以请原谅, 谢谢,我们会热情地接受任何帮助 :)

最佳查看位置是 Apple 提供的 Master-Detail Application 的 Xcode 模板。这是您要查找的 DetailViewController 上的代码。

DetailViewController

import UIKit

class DetailViewController: UIViewController {

@IBOutlet weak var detailDescriptionLabel: UILabel!


var detailItem: AnyObject? {
    didSet {
        // Update the view.
        self.configureView()
    }
}

func configureView() {
    // Update the user interface for the detail item.
    if let detail: AnyObject = self.detailItem {
        if let label = self.detailDescriptionLabel {
            label.text = detail.description

        }
    }
}

MasterViewController

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "showDetail" {
        if let indexPath = self.tableView.indexPathForSelectedRow() {
            let object = objects[indexPath.row] as! NSDate
            let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController
            controller.detailItem = object
            controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
            controller.navigationItem.leftItemsSupplementBackButton = true
        }
    }
}

表格视图代码

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell

    let object = objects[indexPath.row] as! NSDate

    //This Code here tells the label to update for the cell selected.
    cell.textLabel!.text = object.description 

    return cell
}

所以你在 secondViewController 中需要这个

func configureView() {
    // Update the user interface for the detail item.
    if let detail: AnyObject = self.detailItem {
        if let label = self.detailDescriptionLabel {

            //Change the label name to match yours.
            yourLabelName.text = detail.description
        }
    }
}