Ios 单元格中的UIbutton currentTitle
目前我有一个带有自定义单元格的Ios 单元格中的UIbutton currentTitle,ios,swift,uitableview,reusability,Ios,Swift,Uitableview,Reusability,目前我有一个带有自定义单元格的uitableview。 它包含一个ui标签和ui按钮——数据源,该数据源从两个单独的数组中获取。 uibutton功能是为uilabel附加相应的数组行,并将它们插入uitableview中,以及使用下面的另一个uibutton添加一个新单元格 有一个条件-一旦问题数组值为零,将显示答案ui按钮 问题是-因为ui按钮名称是从数组中提取的最后一个值,一旦我滚动,所有按钮标题都将被重新写入以匹配最新的标题 这里是流程图。 这是我的密码 func numberOfS
uitableview
。
它包含一个ui标签
和ui按钮
——数据源,该数据源从两个单独的数组中获取。
uibutton
功能是为uilabel
附加相应的数组行,并将它们插入uitableview
中,以及使用下面的另一个uibutton
添加一个新单元格
有一个条件-一旦问题数组值为零,将显示答案ui按钮
问题是-因为ui按钮
名称是从数组中提取的最后一个值,一旦我滚动,所有按钮标题都将被重新写入以匹配最新的标题
这里是流程图。
这是我的密码
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return numberofsections
// is always equal to zero
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return someTagsArray.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:TblCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! TblCell
cell.lblCarName.text = someTagsArray[indexPath.row]
cell.act1.setTitle(answersdict.last, forState:UIControlState.Normal)
return cell
}
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
var cell:TblCell = cell as! TblCell
if let text = cell.lblCarName.text where text.isEmpty {
cell.act1.hidden = false
} else {
println("Failed")
}
}
有没有办法存储那些ui按钮
值或防止单元格被完全重用
关于我的问答模型的更多数据
我有一本带有嵌套数组的字典,名为linesmain,用于解答问题
linesmain = ["first":["question 1", "question 2", "question 3"], "answer 1": ["question 1", "question 2", "question 3"], "answer 2": ["question 1", "question 2", "question 3"], "answer 3":["question 1", "question 2", "question 3"]]
还有一本类似的字典
answersmain = ["first": ["answer 1"], "answer 1": ["answer 2"], "answer 2": ["answer 3"], "answer 3":["answer 4"]]
我这样做是因为我将来可能会增加答案的数量
然后我有两个数组用于附加单元格。
一个是问题(someTagsArray),另一个是答案(answersdict)。
启动时,加载“第一个”问题和答案,然后根据新添加单元格中的ui按钮
currentTitle
谢谢。不,没有办法阻止电池被重复使用。重用可以降低内存需求,并快速滚动,因为表格只保留足够的单元格,以确保它可以显示可见的行 当您来回滚动时,单元格将不断重复使用。这是正常的,是意料之中的,也不是有意回避的 您必须以一种可以按行查找答案的方式将这些答案值存储在模型中 将
answersdict.last
更改为使用某种方法获取某一行,并返回该行的答案文本
如果您不确定如何做到这一点,则需要发布更多代码,显示模型如何存储问题和答案数据
更新
一般来说,有一些事情我会做不同的事情,你可能会考虑。
someTagsArray[0].count // 3 questions in section 0
answersArray[0] // the one answer for section 0
问题和答案的数量并不相等。正如你指出的那样,这毫无意义
现在我们看到0部分有3个问题和1个答案,我们知道0部分有4行
前三排是问题。最后一行是答案
因此,在
tableView:cellforrowatinexpath
中,您必须检查indexPath.row
,并确定它是问题行还是答案行。这应该很容易做到,我将把它作为一个练习。如果表中的行数超过了屏幕上可以容纳的行数,那么您的方法就会出现问题。在这种情况下,屏幕上滚动的单元格将被重新使用,按钮的内容将丢失。如果您可以确保这种情况永远不会发生,请使用单独的数据源
数组作为按钮标题
您必须创建一个包含按钮标题的单独数组,并且可以对
indexPath.row
使用它们。希望这有帮助请显示您的表格视图:numberOfSections
和表格视图:numberOfRowsForSection:
代码,这样我们就可以看到您的问题和答案是如何映射到(节和)行的。@PetahChristian正在这样做。以及添加有关我的模型的信息。您需要显示someTagsArray
,以便我们可以查看如何将问题和答案添加到该数组中。因为您需要做的是从someTagsArray[indexPath.row]
中提取答案文本,并将其分配给该行的答案按钮。@petahhristian它们看起来像这样someTagsArray=[问题1,问题2,问题3];answersdict=[answer1]
附加数组后,它们看起来像这样someTagsArray=[question1,Question2,Question3,question1,Question2,Question3];回答ICT=[回答1,回答2]
e.t.c.不知道怎么做。请检查我已添加所需信息。完成。我添加了一个示例,演示如何使用节和行对每组问题和答案进行分组。我将尝试这些代码。感谢您的大力帮助。创建二维数组,设置numberOfsections
、numberofrowsinssection
和cellforrowtaindexpath
代码。但是我有一个“数组超出范围”错误,导致这个代码cell.lblCarName.text=someTagsArray[indexPath.section][indexPath.row]
((目前有两个数组,一个是2d“someTagsArray”,另一个是简单数组“answersArray”)。它们的对象计数相等。
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return someTagsArray.count
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return someTagsArray[section].count + 1 // number of Questions + 1 for the answer
}
someTagsArray[0].count // 3 questions in section 0
answersArray[0] // the one answer for section 0