Swift - 如何获取嵌入在UITableView单元格中的选定控件段?

时间:2016-07-20 18:23:06

标签: ios swift uitableview uisegmentedcontrol

我在UIViewController中有一个UITableView。有两个自定义单元格。其中一个有一个UISegmentedControl。

enter image description here

到目前为止,非常好。

当我点击控件时,分段的控件值会发生变化,IBAction函数会按预期运行。

问题是所选索引总是显示为-1,(也就是没有选择)。

我在这里缺少什么?

以下是值更改的代码:

 @IBAction func recurranceChanged(sender: UISegmentedControl?) {

        print ("index: ", recurrenceControl.selectedSegmentIndex) << This returns -1

        if recurrenceControl.selectedSegmentIndex == 0 {
            print("No ")
        }

        if recurrenceControl.selectedSegmentIndex == 1 {
            print("Sometimes ")

        }


        if recurrenceControl.selectedSegmentIndex == 2 {
            print("Yes")

        }

    }

2 个答案:

答案 0 :(得分:2)

试试这个:(同时从UISegmentedControl中删除'?',因为它不需要。)

@IBAction func recurranceChanged(sender: UISegmentedControl) {

    print ("index: ", sender.selectedSegmentIndex)

    if sender.selectedSegmentIndex == 0 {
        print("No ")
    }

    if sender.selectedSegmentIndex == 1 {
        print("Sometimes ")

    }


    if sender.selectedSegmentIndex == 2 {
        print("Yes")

    }

}

这应该可以解决问题;)

答案 1 :(得分:1)

所以我不知道答案/问题是仅在静态表格视图中完成还是通过将IBAction添加到customCellController来完成,但效果不佳。例如,在多个表视图之间重用单元格(我的情况)将导致单元格控制器中的if语句过多(例如对于每个表视图)或导致应用程序崩溃。

另一种解决方法是在每个单元格的SegmentedControl中添加一个目标

快捷键5

CustomCell.swift

@IBOutlet weak var mSC: UISegmentedControl!

ViewController.swift

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     //
     let cell = tableView.dequeueReusableCell(withIdentifier: "textCellIdentifier", for: indexPath) as! CustomCell
     cell.mSC.addTarget(self, action: #selector(ViewController.onSegChange(_:)), for: .valueChanged)
 }


//This function is called when the segment control value is changed
@objc func onSegChange(_ sender: UISegmentedControl) {

    //REPLACE tableview to your tableview var
    let touchPoint = sender.convert(CGPoint.zero, to: self.tableview)
    let tappedIndexPath = tableview.indexPathForRow(at: touchPoint)

    print("SECTION: \(tappedIndexPath!.section)")
    print("ROW #: \(tappedIndexPath!.row)")
    print("SEG CON INDEX: \(sender.selectedSegmentIndex)")
    print("Tapped")

}

我知道这个问题年龄较大,但是希望这对像我这样的人有所帮助。