如何在 tableview 中创建一个具有多个字段的单元格?

Posted

技术标签:

【中文标题】如何在 tableview 中创建一个具有多个字段的单元格?【英文标题】:How can I make a cell in tableview that has multiple fields? 【发布时间】:2014-11-18 19:36:03 【问题描述】:

我想和不同的人一起做一个表格视图。您可以通过单击添加按钮来添加人员。当您单击添加按钮时,您会填写信息“名字”、“姓氏”和“日期”。当您单击完成按钮时,它会返回到 tableview 并且单元格会显示人员的名字。

我创建了一个具有结构的新 swift 文件:

struct person 
   var firstName : String
   var lastName : String
   var date : String

在 tabledetailviewcontroller.swift(添加人员的控制器)中,我为每个字段声明 IBOutlets 并设置每个值:

@IBOutlet weak var firstName: UITextField!
@IBOutlet weak var lastName: UITextField!
@IBOutlet weak var dateText: UITextField!

let first:String = ""
let last:String = ""
let date = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .MediumStyle, timeStyle: .ShortStyle)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) 
    if segue.identifier == "doneSegue" 
        first = firstName.text
        last = lastName.text
        date = dateText.text
    

在 tableviewcontroller.swift 中,我声明了一个类型为“person”的人员数组:

var people = [person]()

还有一个返回数组中人数的函数。

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
   return people.count

然后我有一个设置单元格文本值的函数 覆盖 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->

UITableViewCell 
   let cell = tableView.dequeueReusableCellWithIdentifier("issueCell", forIndexPath: indexPath) as UITableViewCell

   //cell.textLabel.text = issues.dateTime[indexPath.row] //Fixed this to this =>
   cell.textLabel.text = (issues[indexPath.row]).dateTime

   return cell

最后我有一个完成按钮,将新人附加到数组中(这部分一直给我错误...)

@IBAction func done(segue:UIStoryboardSegue)
        var addPersonVC = segue.sourceViewController as AddPersonViewController
        let newPerson = person(date: (addPersonVC.date)) //Breaks here for no reason!

        people.append(newPerson)
    

我的问题是,如何让每个单元格存储多个字段(第一个、最后一个、日期),将其保存在每个人的下方,并让该人的姓名显示在表格视图的单元格中?我希望能够编辑单元格并更改有关此人的信息。

我对 swift 很陌生:/ 非常感谢!

编辑:我已经修复了一些问题,现在它在完成功能处中断!

【问题讨论】:

标准做法是转到新视图以输入新记录,然后在完成后返回。您可以使用表格视图来输入新记录的字段,也可以只使用文本字段。 我有 2 个视图:一个用于实际表格,第二个在您单击添加时出现,它包含所有文本字段。 【参考方案1】:

如果我没有记错或遗漏一些代码,你有两个错误:

    您的结构称为“person”(小 p),但您使用 Person(date: (addPersonVC.date)) 实例化了新的 Person 如果结构的属性是用 let 声明的,则需要在初始化时定义它们,因为它们是常量。否则你必须称它们为 var

【讨论】:

好电话!我修复了这些,但它仍然在这一行中断: let newPerson = person(date: (addPersonVC.date)) 当我调试时,newPerson 的“日期”值是一些奇怪的值!但“addPersonVC.date”显示正确的日期。我没有以正确的方式设置 newPerson 的日期值吗?它应该从 addperson 视图控制器获取日期并将其设置为 newPerson 日期值.. 您可以更新上面的代码以查看函数现在的样子吗?并检查 addPersonVC.date 是否不为零 addPersonVC.date = "2014 年 11 月 18 日,下午 3:40" 所以它不是零。但是当我像上面提到的那样将它分配给 newPerson 时,它给了我一些奇怪的值,然后在那一行中断。 您的结构仍然希望所有值都被初始化,因为它们不是可选的。你可以改成struct person var firstName : String? var lastName : String? let date : String init(date1: String) date = date1 修好了!谢谢!

以上是关于如何在 tableview 中创建一个具有多个字段的单元格?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中创建具有动态 tableview 高度的动态 tableview 单元格

在 Tableview 中创建搜索字段

如何在单个 tableView 中创建各种类型的单元格?

如何在 tableView 中创建自定义单元格(滑动单元格)

如何在单个tableView中创建各种类型的单元格?

如何在古腾堡块中创建多个元字段