Ios 向表视图添加项时遇到问题
我试图在一个tableview单元格中添加3个项目,现在它只需从第一个文本字段打印项目三次,就像图片中一样,我需要它打印第一个项目,然后是第二个项目,然后是第三个项目。我不知道我做错了什么,当我点击添加按钮时,应用程序也完全崩溃了Ios 向表视图添加项时遇到问题,ios,swift,Ios,Swift,我试图在一个tableview单元格中添加3个项目,现在它只需从第一个文本字段打印项目三次,就像图片中一样,我需要它打印第一个项目,然后是第二个项目,然后是第三个项目。我不知道我做错了什么,当我点击添加按钮时,应用程序也完全崩溃了 因此,我的理解是,您希望:- 您从一个空列表开始 当用户按下“添加”按钮时,三个条目将添加到列表中 下表更新了三个额外条目。。。还是应该是一个条目加上三个条目 让我们看第一种情况,即您想要添加三行。为此,您将正确地向videos数组添加三行,并且数据源扩展是正确的
因此,我的理解是,您希望:-
videos
数组添加三行,并且数据源
扩展是正确的(尽管具有相同值的三个文本字段的有用性值得怀疑)。您的错误是在表更新中-您告诉它,一个额外的行与行一起添加:
let indexPath = IndexPath(row: videos.count - 1, section: 0)
tableView.beginUpdates()
tableView.insertRows(at: [indexPath], with: .automatic)
tableView.endUpdates()
如果要添加三行,则需要告诉它已添加三行,即:-
let indexPath1 = IndexPath(row: videos.count - 3, section: 0)
let indexPath2 = IndexPath(row: videos.count - 2, section: 0)
let indexPath3 = IndexPath(row: videos.count - 1, section: 0)
tableView.beginUpdates()
tableView.insertRows(at: [indexPath1, indexPath2, indexPath3], with: .automatic)
tableView.endUpdates()
另一方面,如果只希望添加一行,其中包含所有三行,则行:-
videos.append(addVideoTextField.text!)
videos.append(addVideoTextField2.text!)
videos.append(addVideoTextField3.text!)
这是不正确的。相反,您需要使用一个结构来包含条目,并创建一个新实例并将其添加到视频中。例如,制作一个结构:-
struct VideoRow
{
var first: String
var second: String
var third: String
}
将此作为数据源,即将您的声明更改为:-
var videos: [VideoRow] = []
在插入函数中添加:-
let newVideoRow = VideoRow(first: addVideoTextField.text!, second: addVideoTextField2.text!, third: addVideoTextField3.text!)
videos.append(newVideoRow)
您的cellForRowAt
将变成:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let videoTitle = videos[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "VideoCell") as! VideoCell
cell.videoTitle.text = videoTitle.first
cell.videoTitle2.text = videoTitle.second
cell.videoTitle3.text = videoTitle.third
return cell
}
你的意思是通过应用程序启动/设备电源循环永久性地使用吗?这是另一个需要单独问的问题,但这里对您来说最简单的方法可能是通过UserDefaults
。我更新了代码,在cellForRowAt中的“线程1:致命错误:在展开可选值时意外发现了nil”,该行显示“let cell=”我不是有意要改变你原来的台词。你刚刚编辑过它吗?我肯定我只是复制了你现有的代码?没有,我更改了它,我只是不知道如何用user defalts保存它。请允许这个问题开始(),问一个有问题的新问题。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let videoTitle = videos[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "VideoCell") as! VideoCell
cell.videoTitle.text = videoTitle.first
cell.videoTitle2.text = videoTitle.second
cell.videoTitle3.text = videoTitle.third
return cell
}