Frage

Ich habe eine Tabellenansicht erstellt, die mit einer benutzerdefinierten UITableViewCell (so was).Jede der Zellen enthält zwei UIButtons.Ich weise der Schaltfläche die Aktion folgendermaßen zu:

 [decreaseButton addTarget:self action:@selector(decrease) forControlEvents:UIControlEventTouchUpInside];

Ist das der richtige Weg?Wie auch immer, es funktioniert, aber in meiner „Verringerungs“-Methode muss ich wissen, in welcher meiner 18 Tabellenansichtszeilen die Schaltfläche gedrückt wurde.indexPath.row funktioniert natürlich nicht außerhalb der cellForRowAtIndexPath-Methode.Kann mir jemand erklären, wie das geht?

Vielen Dank im Voraus!

iYassin

War es hilfreich?

Lösung

Sie können dies auf zwei Arten tun.

Überprüfen des Ereignissenders

Ändern Sie Ihre Verringerungsmethode von:

- (void)decrease;

Zu:

- (void)decrease:(id)sender;

Auf diese Weise erhalten Sie beim Aufruf von „Verringern“ einen Verweis auf die Schaltfläche, die das Ereignis „Nachbessern“ durchgeführt hat.

Definieren Sie die Verringerungsmethode näher an den Informationen

Eine andere Lösung wäre, für jede Schaltfläche eine andere Zielinstanz zu haben (z. B. die Verkleinerungsfunktion als Teil der benutzerdefinierten Zelle zu implementieren).Auf diese Weise wissen Sie, dass die Schaltfläche, die berührt wurde, diejenige für die aktuelle Zelle war.

Andere Tipps

Ich habe dieses Problem dadurch gelöst, dass ich den Überblick über die Daten verfolge, die ich möglicherweise in meinem benutzerdefinierten Zellenobjekt benötige.Und der Knopf ist nicht mit dem externen Empfänger verbunden, sondern mit der Zelle selbst, die wiederum weiß, wie sie den tatsächlichen Empfänger der Aktion anrufen kann.

Ich mache meine Zelle mit etwas wie:

cell = [[MyTableViewCell alloc] initWithStyle:style 
                              reuseIdentifier:CellIdentifier];

Und ich habe eine Setup-Methode, mit der ich eine Zelle neu initialisieren kann, wenn ich sie aus der Warteschlange entferne:

[cell setupMyCellWithContext:objectID 
                      target:[[UIApplication sharedApplication] delegate] 
                      action:@selector(someAction)];

Sie verwenden also innerhalb Ihrer Zellklasse die Aktion und das Ziel, die in der Setup-Methode gesendet wurden, um das wahre Ziel aufzurufen:

- (void)doAction:(id)sender {
    if ([target respondsToSelector:action]) {
        [target performSelector:action withObject:objectID afterDelay:0];
    }
}

Wenn Ihr Benutzer also auf die Schaltfläche tippt, ruft das Betriebssystem [cell doAction:] auf, wodurch der Ziel- und Aktionsselektor aufgerufen wird, den Sie zuvor mit dem richtigen Kontextobjekt eingerichtet haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top