制作一个 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 显示以前的用户输入(在其他视图中)的主要内容,如果未能解决你的问题,请参考以下文章

快速制作简单的 Accordion TableView?

iOS tableView右滑显示选择

如何制作可扩展的 UITableView 标头?

为啥我的 tableView 不向下滚动就不会更新?

在 TableView 之间切换

iOS XMPP如何在tableview的单个部分中显示所有用户