如果可以,请提前感谢帮助我。我对Swift仍然很陌生,但期待快速学习,所以我可以在论坛上帮助其他人。
目前,我有一个问题需要解决,我不知道从哪里开始。假设,我的目标是实现以下目标:
第一个视图:用户输入他们访问过的城市名称
第二个视图:用户输入他们在该城市看到的博物馆名称
然后,每当用户在第一个视图上选择一个城市时,将显示存储的“博物馆”信息。
到目前为止,我已经设法使NSUserDefaults正常运行,但无论我从初始View列表中选择的单元格如何,都会显示相同的数据。
我在整个应用程序中使用数组的特定名称来存储,显示和读取来自NSUserDefaults的数据,我想知道编辑它的最佳方法,以便应用程序检查我选择的单元格,然后显示适当的信息(如果没有为该单元输入任何信息,则为无)。
我希望这是一个很好的解释,我知道很久很抱歉。以下是我的代码。欢迎任何意见或建议。谢谢!
import UIKit
import Foundation
class DetailViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var detailTextField: UITextField!
@IBOutlet weak var detailTableView: UITableView!
var receivedString:String = ""
var cell0Array:[NSString] = []
override func viewDidLoad() {
super.viewDidLoad()
detailTextField.delegate = self
detailTableView.delegate = self
detailTableView.dataSource = self
titleLabel.text = receivedString
if NSUserDefaults.standardUserDefaults().objectForKey("cell0Array") != nil {
cell0Array = NSUserDefaults.standardUserDefaults().objectForKey("cell0Array") as! [NSString]
} else {
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
let now = NSDate()
let formatter = NSDateFormatter()
formatter.dateStyle = .MediumStyle
formatter.timeStyle = .NoStyle
let date = formatter.stringFromDate(now)
let detailTextFieldContents = detailTextField.text
let token = "\(date): \(detailTextFieldContents!)lb"
cell0Array.insert(token, atIndex: 0)
NSUserDefaults.standardUserDefaults().setObject(cell0Array, forKey: "cell0Array")
NSUserDefaults.standardUserDefaults().synchronize()
detailTextField.text = ""
detailTextField.resignFirstResponder()
self.detailTableView.reloadData()
return true
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return cell0Array.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let detailCell = tableView.dequeueReusableCellWithIdentifier("detailCell", forIndexPath: indexPath)
let detailItem = cell0Array[indexPath.row]
detailCell.textLabel!.text = detailItem as String
detailCell.textLabel!.textAlignment = .Center
self.view.layoutIfNeeded()
return detailCell
}
}
答案 0 :(得分:0)
这一行有一个明显的问题:
func textFieldShouldReturn(textField: UITextField) -> Bool {
// ...
cell0Array.insert(token, atIndex: 0)
// ...
}
不是弄清楚这个文本字段的单元格所在的表的哪一行,而是将值放在该索引处,而是始终在索引0处插入token
。因此,行和条目之间没有对应关系。 cell0Array
。