如何通过TableCellView" Custom"的switchButton获取rowIndex。

时间:2017-04-14 10:31:40

标签: ios swift xcode

我正在使用Custom TableViewCell构建一个简单的TableViewController。

在这个TableViewCell中我有

1)ImageView 2)标签 3)开关按钮

现在举例来说,当我尝试启动应用程序5行时。 如果用户单击其中一个行项目的切换按钮,我想启动一个方法。

所以我建立了这个方法:

@IBAction func attivaLuci(sender: UISwitch) {
        if sender.on {
            //ATTIVO LA LUCE CORRISPONDENTE
        }else{
            //DISATTIVO LA LUCE CORRISPONDENTE
        }
    }

现在如何获取单元格的rowIndex?

3 个答案:

答案 0 :(得分:1)

使用此

curl

或只是

 let row = sender.convert(sender.frame.origin, to: self.tableview)
 let indexPath = self.tableview.indexPathForRow(at: row)

答案 1 :(得分:0)

  • 您可以使用标记属性。 UIView的任何子类都可以使用此属性来区分对象。

就像你可以在创建时设置buttonA.tag = 101和buttonB.tag = 102。当你想要区分它们时,只需写:if(button.tag == 101)。

  • 或者您可以使用indexPath.row
  • 按单元格区分它们

答案 2 :(得分:0)

在Swift中,一个简单而聪明的方法就是回调闭包。

在自定义单元格中声明变量callback

var callback : ((Bool) -> ())?

并调用IBAction

中的方法
@IBAction func attivaLuci(sender: UISwitch) {
   callback?(sender.isOn)
}

cellForRowAt中的表格视图控制器中设置回调

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
      let cell = tableView.dequeueReusableCell...
   ...
      cell.callback = { isOn in
        // execute code, the index path is captured.
        // isOn is the current state of the switch
      }
   ...
  }

当调用自定义单元格中的IBAction时,将执行回调的闭包。