2016-06-27 2 views
0

Когда я нажал подвью, он не вызвал действие subview. Но я выбрал целую ячейку. Как это исправить?Установить действие для подсмотра внутри ячейки таблицы (swift)

Вот мой код.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("idcell", forIndexPath: indexPath) as UITableViewCell 
    let lblTitle : UILabel = cell.contentView.viewWithTag(101) as! UILabel 
    lblTitle.text = (deptId[indexPath.row] as? String)! + "  " + (deptDesc[indexPath.row] as? String)! 
    var height:CGFloat = 40 
    if(indexPath.row == departmentSelectedRow){ 
     for i in 0...deptProfile.count-1{ 
      let label = UILabel(frame: CGRectMake(0,height,400,30)) 
      label.targetForAction("sadasdd", withSender: nil) 
      height = height+40 
      label.text = ("ewrewrewre") 
      label.backgroundColor = UIColor.redColor() 
      cell.addSubview(label) 
     } 
    } 
    return cell 
} 
+0

Вы думаете, что 'targetForAction' добавляет обратный вызов для вас? – Wain

+0

Как я могу добавить действие для ярлыка? – carmelo

+0

используйте кнопку ... вы также не должны добавлять произвольные подпрограммы в 'cellForRowAtIndexPath' - когда они будут удалены ... – Wain

ответ

0

Если вы хотите, чтобы взаимодействовать с чем-то внутри клетки (а не выделить всю ячейку), то вы должны использовать кнопку или жест распознавань. Это правильные интерактивные элементы, к которым вы можете добавить цель и действие.

Вы должны также изменить, как вы используете клетки, а именно: классы

  1. Использование пользовательских ячеек, так что вы можете напрямую ссылаться на элементы клетки вместо того, чтобы использовать viewWithTag что плохая практика
  2. использовать несколько разные (и, следовательно, идентификаторы), поэтому вы можете использовать фактически разные ячейки для выбранных и невыбранных строк.
  3. Не создавайте и не добавляйте подпрограммы «на лету», это разные классы ячеек для
+0

Каков недостаток, если я добавлю subview в cellForRowAtIndexPath – carmelo

+0

, когда вы повторно используете ячейку, представление все равно будет находиться в виде подзонов. вы можете удалить их, но это бесполезно для их создания и уничтожения, а не для повторного использования, и как вы найдете правильные для удаления (так что вам нужно пометить их и найти их). он может работать, но это очень грязный код (0) – Wain

+0

Мой расширенный контент динамичен. Могу ли я использовать классы ячеек, чтобы справиться с этим? – carmelo

Смежные вопросы