【发布时间】:2016-06-04 18:21:27
【问题描述】:
我环顾四周寻找一个很好的例子,说明如何传递在 1 个视图控制器中创建和填充的数组,并通过模态 segue 将其传递给另一个。
这是我的故事板
用户单击历史按钮,它会弹出打开模态表视图控制器。然后用从原始视图发送或传递的数组的内容填充表格视图。
当我在目标视图控制器中打印数组的内容时,它是空的。所以我认为它的初始化方式存在问题。
这是我目前的代码
这是第一个 UIView 控制器
//UIPickerView BarButtonItem done button actions here
func donePicker() {
txtHeight.resignFirstResponder()
var feet = Int(item1.componentsSeparatedByString(" ")[0])!
let inches = Int(item2.componentsSeparatedByString(" ")[0])!
feet *= 12
let totalInches = feet + inches
totalHeightValues.append(totalInches)
print(totalHeightValues)
txtHeight.text = ""
let alertController = UIAlertController(title: "\(feet / 12) ft" + " " + "\(inches) in", message: "Entry Sucessfully Added", preferredStyle: UIAlertControllerStyle.Alert)
alertController.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default,handler: nil))
self.presentViewController(alertController, animated: true, completion: nil)
}
//UIPickerView BarButtonItem cancel button actions here
func cancelPicker() {
txtHeight.text = ""
txtHeight.resignFirstResponder()
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "showHistory") {
let dVC = (segue.destinationViewController as! HistoryTableViewController)
dVC.totalHeightValuesDest = totalHeightValues
}
}
这里是目标或第二个 tableviewcontroller
import UIKit
class HistoryTableViewController: UITableViewController {
@IBAction func btnExit(sender: AnyObject) {
dismissViewControllerAnimated(true, completion: nil)
}
var totalHeightValuesDest: [Int] = []
override func viewDidLoad() {
super.viewDidLoad()
print(totalHeightValuesDest)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return totalHeightValuesDest.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
cell.textLabel?.text = "\(totalHeightValuesDest[indexPath.row])"
return cell
}
【问题讨论】:
-
a) 仔细检查您的 segue 标识符,并且 b) 该 segue 的目标 VC 是导航控制器,HistoryTableViewController 将是
segue.destinationViewController的topViewController。