当前位置: 首页 > 面试题库 >

Swift-在TableView单元格中使用步进器增加标签

邵祺
2023-03-14
问题内容

另一个Swift初学者。我只是想在每个TableView单元格中使用一个步进器,以在同一单元格中增加标签。

我已经找到了有关此主题的几个问题,但是它们包含其他元素,因此我无法提取基本概念。

到目前为止,我已经为单元格类中的Label和Stepper连接了IBOutlets,并为Stepper连接了IBAction。

class BuyStatsCell: UITableViewCell{

    //these are working fine

    @IBOutlet weak var category: UILabel!
    @IBOutlet weak var average: UILabel!
    @IBOutlet weak var price: UILabel!


    //Outlet for Label and Stepper - How do I make these work?

    @IBOutlet weak var purchaseAmount: UILabel!
    @IBOutlet weak var addSubtract: UIStepper!

    //Action for Stepper - And this?

    @IBAction func stepperAction(_ sender: UIStepper) {
        self.purchaseAmount.text = Int(sender.value).description

    }

}

而且我了解在cellForRowAt indexPath中重用单元格的概念

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "BuyStatsTabCell", for: indexPath) as! BuyStatsCell

        cell.isUserInteractionEnabled = false

 //these are working

        cell.category.text = categories[indexPath.row]
        cell.price.text = String(prices[indexPath.row])
        cell.average.text = String(averages[indexPath.row])

//but is there something I need to add here to keep the correct Stepper and Label for each class?

    return cell
}

已经问到的一个问题包括协议和ViewController中的另一个函数,如下所示

protocol ReviewCellDelegate{
    func stepperButton(sender: ReviewTableViewCell)
}

func stepperButton(sender: ReviewTableViewCell) {
    if let indexPath = tableView.indexPathForCell(sender){
        print(indexPath)
    }
}

我不知道这是否是我应该尝试的方法。我正在寻找最简单的解决方案,但是我很难将各个部分放在一起。

任何帮助表示赞赏。谢谢。


问题答案:

最简单的解决方案(简化):

  • 创建一个BuyStat具有属性的模型purchaseAmount(成为一个类至关重要)。
    强烈建议您不要使用多个数组作为数据源

    class BuyStat {
    
    var purchaseAmount = 0.0
    
    init(purchaseAmount : Double) {
        self.purchaseAmount = purchaseAmount
    }
    

    }

  • 在视图控制器中创建一个数据源数组

    var stats = [BuyStat]()
    
  • viewDidLoad创建一些实例并重新加载表视图

    stats = [BuyStat(purchaseAmount: 12.0), BuyStat(purchaseAmount: 20.0)]
    

    tableView.reloadData()

  • 在自定义单元格中创建一个属性buyStat,以使用观察者来保存当前数据源项,以在buyStat设置时更新步进器和标签

    class BuyStatsCell: UITableViewCell {
    
    @IBOutlet weak var purchaseAmount: UILabel!
    @IBOutlet weak var addSubtract: UIStepper!
    
    var buyStat : BuyStat! {
        didSet {
            addSubtract.value = buyStat.purchaseAmount
            purchaseAmount.text = String(buyStat.purchaseAmount)
        }
    }
    
    @IBAction func stepperAction(_ sender: UIStepper) {
        buyStat.purchaseAmount = sender.value
        self.purchaseAmount.text = String(sender.value)
    }
    

    }

  • cellForRowAtIndexPath获取数据源项并将其传递到单元格

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "BuyStatsTabCell", for: indexPath) as! BuyStatsCell
    cell.buyStat = stats[indexPath.row]
    return cell
    

    }

魔术是 :当您点击步进器时,标签以及数据源阵列将被更新。因此,即使在滚动之后,单元格也将始终获得实际数据。

这样,您就不需要协议或回调闭包。只有模型是具有引用类型语义的类才是重要的。



 类似资料:
  • 我一直试图通过UIViewController将tableviewcell链接到UIView中的tableview。虽然tableview在那里,但我的自定义tableviewcell没有加载。日志显示单元格已初始化并填充 下面是我在viewcontroller中使用的代码,而tableview已经在UIView中设置好了 ViewController.m

  • 问题内容: 如何在Swift中的tableView单元中以编程方式嵌入?我就是那样做 问题答案: 这是您可以在单元格上嵌入的方法。 这是切换调用贝克方法 @LeoDabus 。 注意:如果您可能有多个,则应创建一个CustomCell子类并配置您的内部 方法而不是表视图方法。当将可重用的队列释放出队列时,将其投射到您的CustomCell中这是@LeoDabus的示例

  • 问题内容: 如何在我的表格视图中重新加载单元格的数据?我想向我的服务器发出请求,并且服务器响应JSON。目前,我实现了请求和响应处理,并且可以在单元格中显示数据。但是我希望服务器仅响应十个数据集。当我滚动到带有应用程序中十个单元格的表格视图的末尾时,我想向服务器发出下一个请求,服务器将提供接下来的十个数据集,依此类推。我使用Swift作为编程语言。 谢谢! 问题答案: 您可以使用以便重新加载整个表

  • 我开发了一个应用程序。我在那份申请中有一个问题 我想将scrollview添加到tableview单元格中。我使用下面的代码创建了tableview单元格。 这里是我的自定义单元格类 在现有casescustomcell的init方法中,我添加了滚动视图,其中子视图为4个按钮(buttonEdit、buttonShare、ButtonAnd和buttonDelete)。最初,scrollview处

  • 有没有办法增加公式中单元格引用中的列值?举个例子,在伪代码中,类似于=CELL(Row,Column Month(“”),因此,在一月,公式将引用A21、二月A22、三月A23等等。提前谢谢!

  • 我有一个tableView在几个ColltionView单元格中。每个tableView占据了单元格的全部大小。ColltionView是水平滑动的。 收藏视图: 集合视图单元格内的表视图: tableView将重新加载到CollectionView的cellForItemAt下,并具有自定义单元格。自定义tableView单元格包含几个小视图,这些视图被添加到名为“cellView”的单个视图中