通过 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
}
}
}
我正在尝试通过视图控制器发送数据。
如果我点击一个单元格,我有一个 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
}
}
}