制作一个 tableView 显示以前的用户输入(在其他视图中)
Posted
技术标签:
【中文标题】制作一个 tableView 显示以前的用户输入(在其他视图中)【英文标题】:Make a tableView that shows previous user inputs (in other views) 【发布时间】:2019-03-12 22:47:39 【问题描述】:我正在做我的第一个应用程序,我搜索了很多关于 tableviews、arrays 和 segues 的教程,但我什至无法弄清楚如何解决我的问题,我开始:
我需要应用程序将一个值存储在一个数组(类)中,以便以后可以访问它(而不是在下一个 segue),我做了一个比上一个更简单的不同应用程序,只需一个 UITextfield 输入和一个按钮将其添加到类中。当我从用户输入部分移动到 tableView 时,tableView 是空的。我将代码放在这里:
TABLE VIEWCONTROLLER
import UIKit
class NameTableViewController: UITableViewController
var names = [Name]()
override func viewDidLoad()
super.viewDidLoad()
override func numberOfSections(in tableView: UITableView) -> Int
// #warning Incomplete implementation, return the number of sections
return 1
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
// #warning Incomplete implementation, return the number of rows
return names.count
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cellIdentifier = "NameTableViewCell"
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cellIdentifier", for: indexPath) as? NameTableViewCell else
fatalError("The dequeueReusable cell is not an instance of NameTableViewCell")
let name = names[indexPath.row]
cell.nameLabel.text = name.name
return cell
USER INTERFACE VIEWCONTROLLER:
import UIKit
class ViewController: UIViewController
var name = [Name]()
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
@IBOutlet weak var nameTextField: UITextField!
@IBAction func addingButton(_ sender: UIButton)
let writtenName = nameTextField.text ?? "No name written"
let name1 = Name(name: writtenName)
name.append(name1)
<!-- end snippet -->
VIEWCELL:
class NameTableViewCell: UITableViewCell
@IBOutlet weak var nameLabel: UILabel!
override func awakeFromNib()
super.awakeFromNib()
// Initialization code
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
<!-- end snippet -->
NAME CLASS METHOD:
class Name
var name: String
init(name: String)
self.name = name
!-- end snippet -->
TableView
User Input
抱歉,这是一个愚蠢的问题,因为您可能已经注意到我是新的编程新手,而 swift 是我正在学习的第一门语言。
【问题讨论】:
【参考方案1】:您可以使用 nsuserdefaults https://developer.apple.com/documentation/foundation/nsuserdefaults 并存储一个可解码的密钥结构,然后在任何地方调用它。
// 保存数据
struct People: Codable
let name: String?
var peopleArray = [People]()
let mike = People(name: "mike")
peopleArray.append(mike)
UserDefaults.standard.set(peopleArray, forKey: "people")
// 请求存储的数据
func getPeople() -> [People]?
let myPeople = UserDefaults.standard.data(forKey: "people")
if myPeople == nil
return nil
let peopleArray = try! JSONDecoder().decode([People].self, from: myPeople!)
return peopleArray
let people = getPeople()
if(people != nil)
for person in people
print(person.name)
【讨论】:
由于这是 Swift,您应该发布指向UserDefaults
的链接,而不是 NSUserDefaults
。
@rmaddy 对此感到抱歉。但解决方案是用 Swift 编写的,只是在 URL 上犯了一个错误。感谢您的观察,我会更新它。以上是关于制作一个 tableView 显示以前的用户输入(在其他视图中)的主要内容,如果未能解决你的问题,请参考以下文章