【问题标题】:When I tapped segment Odd or even I am getting true and false value in Tableview instead of odd value or even value当我点击段奇数甚至偶数时,我在 Tableview 中得到真假值而不是奇数或偶数
【发布时间】:2021-11-07 22:18:37
【问题描述】:

当我按奇数时,它显示真或假。如何获取数组的值当我在段上点击奇数时尝试打印奇数值,或者当我点击偶数时打印偶数值,如何获得这个值。我是ios新手。请帮忙

class ViewController: UIViewController, UITableViewDelegate,UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!
    
    @IBOutlet weak var segmentOutlet: UISegmentedControl!
    let numberArray = Array(1...100)
    var segmentIndex  = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        tableView.delegate = self
        tableView.dataSource = self
    }
    @IBAction func segmentControl(_ sender: UISegmentedControl) {
        

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell : TableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell") as! TableViewCell
        cell.numberLbl.text = String(numberArray[indexPath.row])
        if segmentOutlet.selectedSegmentIndex == 1 {
            cell.numberLbl.text = String(numberArray[indexPath.row] % 2 == 0)
            
        }
        if segmentOutlet.selectedSegmentIndex == 2 {
            cell.numberLbl.text = String(numberArray[indexPath.row] % 2 == 1)
        }
        
        return cell
    }
}

我的模拟器图片:

【问题讨论】:

  • numberArray[indexPath.row] % 2 == 0 计算结果为 truefalse。你会从哪里得到奇数/偶数?
  • 如何获取值?
  • 哦,您是要显示1 3 5 7 9.... 的奇数列表和2 4 6 8.... 的偶数列表吗?
  • 是的,先生,1 3 5 7 9.... 表示奇数,2 4 6 8.... 表示偶数。
  • 您应该将其设为两个 AND 条件,而不是像 if segmentOutlet.selectedSegmentIndex == 1 && numberArray[indexPath.row].isMultiple(of: 2) {

标签: ios swift uitableview segment


【解决方案1】:

您的numberArray[indexPath.row] % 2 == 0 有一个==,其计算结果为真/假。这真的没有意义。另外,没有必要检查当前的indexPath.row 是奇数还是偶数...您正在尝试显示偶数或奇数的列表,那么indexPath.row 与此有什么关系?

请尝试创建第二个数组filteredArray。这将是表格视图直接从中获取数据的地方。

let numberArray = Array(1...100)
lazy var filteredArray: [Int] = { numberArray }() /// return `numberArray` by default

然后您可以根据selectedSegmentIndex 更新filteredArray

@IBAction func segmentControl(_ sender: UISegmentedControl) {
    switch sender.selectedSegmentIndex {
    case 1: /// even numbers
        filteredArray = numberArray.filter { $0 % 2 == 0}
    case 2: /// odd numbers
        filteredArray = numberArray.filter { $0 % 2 == 1}
    default: /// all numbers
        filteredArray = numberArray
    }
    tableView.reloadData()
}

最后,只需在您的数据源方法中读取 filteredArray

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return filteredArray.count /// use `filteredArray`
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell: TableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell") as! TableViewCell
    cell.numberLbl.text = String(filteredArray[indexPath.row]) /// also use `filteredArray`
    return cell
}

【讨论】:

  • @Fatehprajapat 如果答案有效,您可以单击绿色复选标记接受吗?
  • 如果您要引入一个新属性,那么为什么不将其设置为两个,一个用于偶数数组,一个用于奇数数组?我的意思是,它不像 4 有时会是奇数,有时甚至是……否则请参阅我上面的评论以获得更动态的解决方案
  • @JoakimDanielson 这就是我在删除的答案中最初想到的,但 OP 有一个“数字”选项卡,我认为它应该显示所有数字,偶数或奇数。此外,如果有单独的数组,您需要检查 both numberOfRowsInSection cellForRowAt 内的 segmentOutlet.selectedSegmentIndex,对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
相关资源
最近更新 更多