如何在 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 单元格