对来自ViewController中自定义单元格的单元格输入进行排序

杰克·芬恩

我有一个ViewController,其中集成了tableView和“排序”按钮。此tableView的单元格在另一个名为“ customizedCell”的类中进行了自定义。

加载ViewController后,tableView中的标签(riskTitle:UITextView!在CellCustomized中)将填充存储在数组中的项目(ViewController中的RiskTitles_Plan = String)。我下面的代码具有一些为此数组硬编码的值。

我现在想做的是将两个pickerViews生成的数字存储在标签“ riskFactor:UILabel!”中。在一个数组中(RiskFactor_Plan-> RiskFactor_Int)。当用户单击按钮排序时,必须对数组中的值进行排序,并且tableView中的行将以新的顺序加载(最小到最大,反之亦然)。

这是我的代码(删除了不必要的代码)。

Swift 3-ViewController:

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var RiskTitles_Plan = [String]()
    var RiskFactor_Plan = [String]()
    var RiskFactor_Plan_Int = [Int]()

    var sortBtn = UIButton()

    override func viewDidLoad() {
        super.viewDidLoad()

        RiskTitles_Plan = ["my cat","my dog","my sheep","my cow","my fish"]

        sortBtn.setImage(UIImage(named: "Sort"), for: UIControlState.normal)
        sortBtn.addTarget(self, action: #selector(RiskPlan.sortAction(_:)), for: .touchUpInside)
        self.view.addSubview(sortBtn)
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return RiskTitles_Plan.count
    }

 /////// Here comes the interesting part ///////

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

        RiskFactor_Plan.append(cell.riskFactor.text!)
        cell.riskTitle?.text = RiskTitles_Plan[indexPath.row]
        cell.backgroundColor = myColorsClass.darkCyan()

        for i in RiskFactor_Plan_Int {
            let stringItem: String = String(i)
            RiskFactor_Plan.append(stringItem)
        }

        cell.riskFactor.text! = RiskFactor_Plan[indexPath.row]

        return cell
    }

    func sortAction(_ sender:UIButton!) {

        for i in RiskFactor_Plan {
            let intItem: Int = Int(i)!
            RiskFactor_Plan_Int.append(intItem)
        }

        RiskFactor_Plan_Int = RiskFactor_Plan_Int.sorted{ $0 < $1 }
        tableView.reloadData()
    }
}

Swift 3-CellCustomized:

import UIKit

class CellCustomized: UITableViewCell {

    var myColorsClass = myColors()
    var myStylesClass = myStyles()

    @IBOutlet weak var riskTitle: UITextView!
    @IBOutlet weak var riskFactor: UILabel!

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier) // the common code is executed in this super call

    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func awakeFromNib() {
        super.awakeFromNib()

    } // nib end

}

上面的代码导致fatal error: unexpectedly found nil while unwrapping an Optional value代码行错误let intItem: Int = Int(i)!单击排序按钮时,在ViewController中。

我的问题是要弄清楚

  • 如何将生成的值保存在riskFactor中:UILabel!运行时在数组中(-> RiskTitles_Plan = String)。我想每当用生成的值更新表中的标签时,都需要追加数组

  • 如何将字符串数组(-> RiskTitles_Plan = String)转换为整数数组(-> RiskTitles_Plan_Int = Int)

威尔逊

根据您遇到的问题,我尝试在项目中进行复制,因此这就是我的工作方式,希望它可以为您提供帮助。

结果:

代码:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{
  @IBOutlet weak var tableView: UITableView!
  
  var risks = Array<(title: String, factor: Int)>()

  override func viewDidLoad() {
    super.viewDidLoad()
    
    tableView.delegate = self
    tableView.dataSource = self
    
    risks.append(("my cat", 0))
    risks.append(("my dog", 0))
    risks.append(("my sheep", 0))
    risks.append(("my cow", 0))
    risks.append(("my fish", 0))
  }
  
  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return risks.count
  }
  
  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
    
    let riskTitle = risks[indexPath.row].title
    let riskFactor = risks[indexPath.row].factor
    
    cell.titleLabel.text = riskTitle
    cell.factorLabel.text = String(riskFactor)
    cell.index = indexPath.row
    
    
    cell.onFactorValueChanged = { [unowned self] newFactorValue, atIndex in
      self.risks[atIndex].factor = newFactorValue
    }
    
    return cell
  }
  
  @IBAction func sortRisksBasedOnFactor(_ sender: AnyObject) {
    risks.sort { (riskA, riskB) -> Bool in
      return riskA.factor > riskB.factor
    }
    
    tableView.reloadData()
  }
}

class TableViewCell: UITableViewCell {
  
  @IBOutlet weak var titleLabel: UILabel!
  @IBOutlet weak var factorLabel: UILabel!
  var index = 0
 
  var onFactorValueChanged: (Int, Int) -> Void = { _ in }
 
  @IBAction func generateFactor(_ sender: AnyObject) {
    factorLabel.text = String(random(min: 1, max: 10))
    onFactorValueChanged(Int(factorLabel.text!)!, index)
  }
  
  func random(min: Int, max: Int) -> Int {
    guard min < max else {return min}
    return Int(arc4random_uniform(UInt32(1 + max - min))) + min
  }
  
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何禁用UITableview单元格的UserInteraction,但不能在单元格的自定义按钮中禁用

来自分类Dev

在NSTableView中创建自定义单元格

来自分类Dev

在自定义Tableview单元格中推送ViewController

来自分类Dev

UITapGestureRecognizer用于UITableView中的自定义单元格

来自分类Dev

UISearchController的自定义单元格

来自分类Dev

单击自定义单元格中的按钮时获取包装单元格

来自分类Dev

访问heightForRowAtIndexPath中的自定义单元格属性

来自分类Dev

在自定义函数中获取单元格对象

来自分类Dev

自定义UITableView单元格Nib文件仅在选择单元格后显示?

来自分类Dev

如何使用Swift在UICollectionView单元格中加载自定义单元格(xib)

来自分类Dev

在自定义单元格中无法识别属性

来自分类Dev

自定义表格视图单元格中的图像视图在单元格插入表格后消失

来自分类Dev

CollectionView中的自定义单元格重新排序行为

来自分类Dev

用于联接单元格的自定义函数以及来自Google电子表格中相邻单元格的可选值吗?

来自分类Dev

如何基于不同单元格中的特定条目将自定义文本添加到单元格?

来自分类Dev

包含自定义单元格的UITableView的UISearchBar =>空白单元格

来自分类Dev

访问自定义单元格中的标签值

来自分类Dev

自定义单元格标签

来自分类Dev

自定义tableview单元格-需要选择单元格,即使按下单元格中的自定义按钮

来自分类Dev

将数据从自定义表单元格中的uicollectionview传递到viewcontroller

来自分类Dev

自定义单元格重复

来自分类Dev

<table>中的自定义单元格/边框间距

来自分类Dev

在自定义单元格中无法识别属性

来自分类Dev

自定义视图单元格中的单元格间距

来自分类Dev

直接从自定义单元格在viewcontroller中运行Delegate方法

来自分类Dev

更新不同单元格中的自定义函数

来自分类Dev

使用来自 xib 的自定义单元格在 UITableView 中动态行高

来自分类Dev

自定义单元格在 TableView 中全白

来自分类Dev

在 Excel 中更新单元格值时,如何使自定义排序自动更新?

Related 相关文章

  1. 1

    如何禁用UITableview单元格的UserInteraction,但不能在单元格的自定义按钮中禁用

  2. 2

    在NSTableView中创建自定义单元格

  3. 3

    在自定义Tableview单元格中推送ViewController

  4. 4

    UITapGestureRecognizer用于UITableView中的自定义单元格

  5. 5

    UISearchController的自定义单元格

  6. 6

    单击自定义单元格中的按钮时获取包装单元格

  7. 7

    访问heightForRowAtIndexPath中的自定义单元格属性

  8. 8

    在自定义函数中获取单元格对象

  9. 9

    自定义UITableView单元格Nib文件仅在选择单元格后显示?

  10. 10

    如何使用Swift在UICollectionView单元格中加载自定义单元格(xib)

  11. 11

    在自定义单元格中无法识别属性

  12. 12

    自定义表格视图单元格中的图像视图在单元格插入表格后消失

  13. 13

    CollectionView中的自定义单元格重新排序行为

  14. 14

    用于联接单元格的自定义函数以及来自Google电子表格中相邻单元格的可选值吗?

  15. 15

    如何基于不同单元格中的特定条目将自定义文本添加到单元格?

  16. 16

    包含自定义单元格的UITableView的UISearchBar =>空白单元格

  17. 17

    访问自定义单元格中的标签值

  18. 18

    自定义单元格标签

  19. 19

    自定义tableview单元格-需要选择单元格,即使按下单元格中的自定义按钮

  20. 20

    将数据从自定义表单元格中的uicollectionview传递到viewcontroller

  21. 21

    自定义单元格重复

  22. 22

    <table>中的自定义单元格/边框间距

  23. 23

    在自定义单元格中无法识别属性

  24. 24

    自定义视图单元格中的单元格间距

  25. 25

    直接从自定义单元格在viewcontroller中运行Delegate方法

  26. 26

    更新不同单元格中的自定义函数

  27. 27

    使用来自 xib 的自定义单元格在 UITableView 中动态行高

  28. 28

    自定义单元格在 TableView 中全白

  29. 29

    在 Excel 中更新单元格值时,如何使自定义排序自动更新?

热门标签

归档