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
更改为使用某种方法获取某一行,并返回该行的答案文本

如果您不确定如何做到这一点,则需要发布更多代码,显示模型如何存储问题和答案数据

更新

一般来说,有一些事情我会做不同的事情,你可能会考虑。

  • 可选择tableView单元格。您可以让用户选择(点击)单元格来完成按钮事件的工作,而不是向单元格中添加按钮

  • 因此,最好将数据划分为多个部分,每个部分都包含该部分的问题和答案:

  • 更新2:

    你看到数据如何被分解成部分的例子了吗?让我们看看第一部分的计数,即第0部分:

    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