2016-06-27 12 views
0

Wenn ich auf die Unteransicht geklickt habe, hat dies die Aktion der Unteransicht nicht ausgelöst. Aber ich habe ganze Zelle ausgewählt. Wie man es repariert?Aktion für Unteransicht in einer Tabellenzelle festlegen (swift)

Hier ist mein Code.

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

glaubst du, dass 'targetForAction' einen Callback für dich hinzufügt? – Wain

+0

Wie kann ich Aktionen für Etiketten hinzufügen? – carmelo

+0

Verwenden Sie eine Schaltfläche ... Sie sollten auch keine willkürlichen Subviews in 'cellForRowAtIndexPath' hinzufügen - wann werden sie entfernt ... – Wain

Antwort

0

Wenn Sie mit etwas in einer Zelle interagieren möchten (anstatt die ganze Zelle auszuwählen), sollten Sie eine Schaltfläche oder eine Gestenerkennung verwenden. Dies sind richtig interaktive Elemente, denen Sie ein Ziel und eine Aktion hinzufügen können.

Sie sollten auch ändern, wie Sie Zellen verwenden, insbesondere:

  1. Verwenden Sie Klassen individuelle Zelle, so dass Sie direkt die Zellelemente anstelle von viewWithTag verweisen können, die schlechte Praxis
  2. Verwenden Sie mehrere unterschiedliche Zellklassen (und damit Bezeichner), so dass Sie tatsächlich verschiedene Zellen für ausgewählte und nicht ausgewählte Zeilen verwenden können
  3. Erstellen Sie keine Unteransichten und fügen Sie sie nicht spontan hinzu, dies sind die verschiedenen Zellklassen für
+0

Was ist der Nachteil, wenn ich Subview in CellForRowAtIndexPath – carmelo

+0

hinzufügen, wenn Sie die Zelle wieder verwenden die Ansicht wird immer noch als Subviews dort sein. Sie können sie entfernen, aber es ist verschwenderisch, sie zu erstellen und zu zerstören, anstatt sie wiederzuverwenden und wie finden Sie die richtigen zu entfernen (also müssen Sie sie alle markieren und danach suchen). es kann funktionieren, aber es ist sehr chaotisch (schlecht) code – Wain

+0

Mein erweiterter Inhalt ist dynamisch. Kann ich noch Zellklassen verwenden, um damit umzugehen? – carmelo

Verwandte Themen