2016-04-09 29 views
0

Ich habe einen ViewController, der eine TableView enthält. Ich möchte in jeder Zelle einen roten Knopf haben, der etwas getan hat (sagen wir "Hallo" zum Test), oder wenn ich die Zelle irgendwo berühre, aber nicht auf dem Knopf, führe ich einen Übergang durch.Swift - Tastenaktion nicht ausgelöst in der Tabellenansicht Zelle

Aber selbst wenn ich den Knopf berühre, ist es das Segment, das durchführt. Ich habe versucht, einige Suche auf SF, aber keine der Fragen helfen mir ...

Ich weiß nicht, ob das ist üblich, aber wenn ich die Zelle berühren, wird die ganze Reihe weißer Hintergrund grau, auch der Hintergrund der roten Taste .

In Storyboard habe ich diese Zellhierarchie:

hierarchy of the cell

Die Interaktion mit dem Benutzer wird sowohl auf Zell- und Taste aktiviert.

In den Fragen, die ich fand, sagten sie, auf dem Zellensatz 'Zubehör' auf 'Enthüllungsanzeige', habe ich es getan, aber wenn es möglich ist, möchte ich es bei 'None' behalten. Auch ich eine benutzerdefinierte Klasse für die Zelle gesetzt, hier ist der Code:

class MyTableViewCell: UITableViewCell { 
@IBOutlet weak var rentButton: UIButton? // I use this class for 2 tableview almost similar, but in the other I don't have the redButton, that's why I put an '?' 
} 

Ich habe auch die Delegierten und Datenquelle des Tableview zu meinem Viewcontroller, hier ist der Code meiner Ansicht-Controller:

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

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! MyTableViewCell 

    cell.rentButton!.tag = indexPath.row 
    cell.rentButton!.addTarget(self, action: #selector(MyViewController.rent(_:)), forControlEvents: .TouchUpInside) 

    return cell 
} 
// Rent() is never called: 
func rent(sender: UIButton) { 
    print("here \(sender.tag)") 
} 

EDIT: Die Lösung war, den Button aus der Conainer-Ansicht zu löschen!

Antwort

1

Sie können den Vorgang anhalten, wenn die Taste gedrückt wird, indem Sie ihn programmatisch ausführen. Sie können wie folgt vorgehen:

  1. Ihre segue entfernen, die zu einem anderen Ansicht-Controller aus der Zelle hinausgeht und es von den Tableviewcontroller auf den anderen View-Controller

  2. Erstellen Sie eine Variable in Ihrer Tableviewcontroller Klasse geht so ändern, wie: var button = false

  3. In Ihrer Aktion Set-Taste button~~POS=TRUNC auf true

  4. In didSelectRow prüfen, ob nicht button wahr ist, dann performSegue und Änderung falsch Button, sonst nichts tun

  5. Wie bereits erwähnt, auf die Schaltfläche aus dem Behälter in die Inhaltsansicht

+0

Sie bewegen Dank. Aber es funktioniert immer noch nicht. :(Mein Übergang für jede Zelle geht nicht von Zelle, sondern von der ViewController. Ich habe Strg + Drag von der gelben Symbol auf der ersten VC auf die zweite VC. In der Tat wird die Methode rent() nie aufgerufen, es Führen Sie immer den Übergang ... – Kev

+1

Können Sie versuchen, die Rent-Schaltfläche aus dem ContainerView in den ContentView zu verschieben? Erste Anlaufstelle sollte sein, dies richtig auszulösen –

+0

Ich habe die Schaltfläche aus der Containeransicht verschoben und es funktioniert! Vielen Dank Du! – Kev

Verwandte Themen