2016-03-04 6 views
4

У меня возникли проблемы с внедрением UISwitch в UITableViewCell. Мой tableViewCell:, идентифицирующий UISwitch в UITableViewCell

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

{ 

    let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell") 


    cell.textLabel?.text = "Hello Magic Switch buyers!" 
    cell.textLabel?.textColor = UIColor.whiteColor() 
    cell.backgroundColor = UIColor.clearColor() 

    lightSwitch = UISwitch(frame: CGRectZero) as UISwitch 
    lightSwitch.on = false 
    lightSwitch.addTarget(self, action: "switchTriggered", forControlEvents: .ValueChanged); 



    cell.accessoryView = lightSwitch 

    return cell 
} 

Это создает переключатель, все идет хорошо, до того момента, функция не будет вызвана .. То, что вы обычно делаете с, например, кнопка, просто используя его indexPath.row, чтобы сделать разницу между всеми ячейками, но поскольку это вспомогательный вид, я не смог заставить это работать! SwitchTriggered функция:

func switchTriggered() { 



    if lightSwitch.on { 

     let client:UDPClient = UDPClient(addr: "192.168.1.177", port: 8888) 
     let (_) = client.send(str: "HIGH") 
     print(String(indexPath.row) + " set to high") 

    } else { 
     let client:UDPClient = UDPClient(addr: "192.168.1.177", port: 8888) 
     let (_) = client.send(str: "LOW") 
     print(String(indexPath.row) + " set to low") 
    } 

} 

функция не знает, какой Lightswitch был включен и что indexPath есть .. Как я могу это исправить? Если бы это была кнопка, я мог бы использовать accessoryButtonTappedForRowWithIndexPath, но это не тот случай.

Некоторая помощь будет оценена, так как вся информация о UISwitches в TableViewCells находится в Objective-C.

спасибо!

+0

Я не знаю, если есть еще лучше (читай: встроенный) способ сделать это, но мне нравится и реализовано, принятый ответ здесь: http://stackoverflow.com/questions/29722113/how-to-access-index-path-of-button-in-a-custom-tableviewcell – Shades

+0

Спасибо , что должно действительно исправить это. –

ответ

6

Самое простое решение - использовать свойство переключателя tag. При создании переключателя, присвоить тег

lightSwitch = UISwitch(frame: CGRectZero) as UISwitch 
lightSwitch.tag = 2000 
lightSwitch.addTarget(self, action: Selector("switchTriggered:"), forControlEvents: .ValueChanged); 

Затем измените метод обработки, чтобы иметь параметр Sender

func switchTriggered(sender: AnyObject) { 

    let switch = sender as! UISwitch 
    if switch.tag == 2000 { 
     // It's the lightSwitch 
    } 
} 
+0

Есть 10 lightSwitches (потому что есть 10 tableViewCells), как это помогает определить, какой переключатель он нажат? –

+1

Просто присвойте 'indexPath.row' как' тег' коммутатора. Вы узнаете, какой переключатель, в какой строке, был активирован таким образом. – RaffAl

+0

Лучше ответить, чем тот, на который я ссылался +1 – Shades