2013-03-18 12 views
12

Ich möchte eine benutzerdefinierte Schaltfläche auf meinen Zellen hinzufügen, die dasselbe wie Swipe-to-Delete-Funktion tun. Wenn Sie also auf meine benutzerdefinierte Schaltfläche klicken, wird diese ausgeblendet, damit der offizielle rote "Löschen" -Button angezeigt wird.Programmgesteuertes Auslösen von UITableViewCell Schaltfläche "Löschen"

So habe ich etwas wie folgt aus:

/// Controller.m 
/// 
/// @brief Delete icon button pressed. Trigger display of Delete full button 
/// 
- (IBAction)deleteDrug:(id)sender event:(id)event { 
    NSIndexPath *indexPath = [self indexPathForButton:sender event:event]; 
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
    [cell setEditing:YES animated:YES]; 
} 

/// CustomCell.m 
- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 

    // hide/show "modify" button when entering in edit mode 
    switch (editing) { 
     case YES: 
      self.deleteButton.hidden = YES; 
      break; 
     case NO: 
      self.deleteButton.hidden = NO; 
      break; 
     default: 
      break; 
    } 
} 

In diesem Moment meine benutzerdefinierte Schaltfläche werden immer verstecken, wenn Sie auf sie, aber die offizielle rote Schaltfläche „Löschen“ wird nicht angezeigt.

Weiß jemand, wie man damit umgeht?

Antwort

5

Ich glaube, die Schaltfläche zum Löschen wird mehr von der TableView behandelt. Anstatt also Ihre Zellenbearbeitung einzustellen, müssen Sie dem TableView möglicherweise mitteilen, dass es bearbeitet werden soll.

- (IBAction)deleteDrug:(id)sender event:(id)event { 
    selectedButtonIndex = [self indexPathForButton:sender event:event]; 

    [tableView setEditing:YES animated:YES]; 
} 

So müssen Sie möglicherweise etwas tun, wie die TableView zu bearbeiten. Dann können Sie diese Methode in der Datenquelle Ihrer Tabellenansicht implementieren, wobei selectButton der Indexpfad für die richtige Zelle ist.

Möglicherweise müssen Sie diese Methode für Ihre Datenquelle implementieren.

- (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return UITableViewCellEditingStyleDelete; 
} 
+6

'[tableView setEditing: YES animiert: YES];' bewirkt die Erscheinung des roten Symbols, das auf der linken Seite der Zelle platziert ist (das Symbol, mit dem Sie die rote Schaltfläche "Delete" auf der rechten Seite aufrufen können). Und ich will es nicht. Ich möchte wirklich, dass meine benutzerdefinierte Schaltfläche direkt den roten "Löschen" -Knopf auf der rechten Seite aufruft. – Yaman

+0

Ich nehme das wahr. Es ist möglich, dass, da Sie versuchen, das erwartete Verhalten für Sie außer Kraft zu setzen, möglicherweise die volle Entfernung gehen und die Lösch-Schaltfläche ebenfalls behandeln müssen. –

+0

Ye ich hatte Angst, dass wäre der einzige Weg ... Danke für Ihre Hilfe Ryan. – Yaman

-3

tun Sie dies bitte, um Ihre Löschtaste auf der rechten Seite von UITableViewcell zu arbeiten.

+0

unangemessene Antwort. –

+0

Beantwortet die Frage nicht. – Camsoft

1

Ich habe keine passende Lösung für diese Frage gefunden, also habe ich meine eigene gemacht. Ich habe einen gefälschten Lösch-Button gemacht und es funktioniert ziemlich genau wie der Original-Button. Ich zeige hier den kniffligen Löschbutton.

Wenn Sie wissen möchten, wie Standard-minus ersetzen (Löschen) bearbeiten Kontrolle, da über sie schöner Artikel ist, empfehle ich: http://vinsol.com/blog/2015/01/06/custom-edit-control-for-uitableviewcell/

So nehmen Sie erste Teil aus dem Artikel und Sie wollen sehen, Löschen Sie die Schaltfläche, wenn Sie Ihre benutzerdefinierte Bearbeitungssteuerschaltfläche drücken. Der Code ist auf dem Swift, aber können Sie dieselben Schritte verwenden, um diese in

Objective-C zu machen
func deleteButtonShow(){ 

    let deleteButton = UIButton(frame: CGRect(x: self.frame.width, y: 0, width: 80, height: self.frame.height)) 
    deleteButton.backgroundColor = UIColor.redColor() // ! note: original delete have another color 
    deleteButton.setTitle("Delete", forState: UIControlState.Normal) 
    deleteButton.setTitleColor(UIColor.whiteColor(), forState: .Normal) 
    deleteButton.addTarget(self, action: "actionForDelete", forControlEvents: UIControlEvents.TouchUpInside) 
    // action for your button will call delegate that will do the delete work. in most cases 
    self.contentView.addSubview(deleteButton) 

    var movedSubviews = self.subviews   
    var i = 0 
    for subview in movedSubviews { 
     // NOTE: I added tag = 1 in the storyboard to Content View of my cell 
     if subview.tag == 1 { 
      movedSubviews.removeAtIndex(i) // we don't need to move it. 
      break 
     } 
     ++i 
    } 
    movedSubviews.extend(self.contentView.subviews)// add subviews from content view 

    UIView.animateWithDuration(0.3, animations: {() -> Void in 

     for movedView in movedSubviews as! [UIView] { 

      movedView.frame = CGRect(origin: CGPoint(x: movedView.frame.origin.x - 80, y: movedView.frame.origin.y), size: movedView.frame.size) 
     //animate the things  
     } 

    }) 


} 

Wir wollen nicht Inhalt Ansicht bewegen, wie ich das gefunden, wenn unsere Taste ist nicht auf die über dem Inhalt Sehen Sie es ist unberührbar, ich habe einige Gedanken warum, aber nicht sicher. Wenn Sie wissen warum, fügen Sie bitte diese Informationen in den Kommentaren hinzu, ich würde es gerne wissen.

Ich möchte auch darauf hinweisen, dass wenn Sie Auto-Layout als ich verwenden, müssen Sie die Einschränkungen in der Animation ändern, nicht es ist Rahmen, so dass Sie nicht brauchen extend Teil.

Verwandte Themen