2016-09-29 1 views
1

Gibt es eine Möglichkeit, eine UITableView-Zelle laden mit nach rechts swiped, um das Vorhandensein der Bearbeitungsfunktionen zu zeigen. Ich möchte es als eine Möglichkeit, die Verwendungen in meiner App zu erziehen, dass es in einem der TableViews mit dieser Funktion getan werden kann.Automatisierte UITableView Cell swiped (bearbeiten)

z.B. Ich habe einen Screenshot der Mail-App mit einer Zelle geklaut und möchte, dass meine App mit einer bereits so geklauten Zelle geladen wird.

enter image description here

Vielen Dank im Voraus. ;)

Die Swift Umwandlung der AnimateCell ObjectiveC Antwort unter

var Zelle: UITableViewCell?

func animateCell() {

let indexPath = NSIndexPath(row: 2, section: 1) 



cell = self.tableView.cellForRow(at: (indexPath as NSIndexPath) as IndexPath) 

// The crash occurs here with lldb 
var aLabel = UILabel(frame: CGRect(x: (cell?.bounds.size.width)!, y: 0, width: 200, height: (cell?.bounds.height)!)) 
aLabel.text! = "Delete" 
aLabel.backgroundColor = UIColor.red 
aLabel.textColor = UIColor.white 
cell?.addSubview(aLabel) 

UIView.animate(withDuration: 0.3, animations: {() -> Void in 
    self.cell?.frame = CGRect(x: (self.cell?.frame.origin.x)! - 100, y: (self.cell?.frame.origin.y)!, width: (self.cell?.bounds.size.width)!, height: (self.cell?.bounds.size.height)!) 

    }, completion: {(finished: Bool) -> Void in 
     UIView.animate(withDuration: 0.5, animations: {() -> Void in 

      self.cell?.frame = CGRect(x: (self.cell?.frame.origin.x)! + 100, y: (self.cell?.frame.origin.y)!, width: (self.cell?.bounds.size.width)!, height: (self.cell?.bounds.size.height)!) 

      }, completion: {(finished: Bool) -> Void in 
       aLabel.removeFromSuperview() 
       aLabel = nil 
     }) 
}) 

}

+0

Es gibt nicht viele konkrete lin ks online. Ich weiß, wie man den Bearbeitungsprozess erstellt, um einem Benutzer zu helfen, eine Zelle und ihre Daten zu wischen und zu löschen. Aber es gibt keine klaren Wege, wie es automatisiert werden kann. Meine aktuelle Methode besteht darin, ein benutzerdefiniertes Popup zu verwenden, um den Benutzer über die Fähigkeit zu informieren. – Gugulethu

Antwort

0

Sie möchten Standardbearbeitungsmodus Tableview einzustellen. Der Bearbeitungsmodus ist ein Zustand der UITableView. Sie können es programmgesteuert einstellen mit:

[tableView setEditing:YES animated:YES] 

Sie können dies mit oder ohne Animation tun.

+0

Leider zeigt diese Methode nur die Delete-Buttons auf der linken Seite seltsam an. Ich dachte natürlich, es würde funktionieren. – Gugulethu

1

Sie können so etwas wie dies versuchen:

-(void)animateCell{ 

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

    __block UILabel *aLabel = [[UILabel alloc]initWithFrame:CGRectMake(cell.bounds.size.width, 
                      0, 
                      200, 
                      cell.bounds.size.height)]; 

    aLabel.text = @"Delete"; 
    aLabel.backgroundColor = [UIColor redColor]; 
    aLabel.textColor = [UIColor whiteColor]; 
    [cell addSubview:aLabel]; 

    [UIView animateWithDuration:0.3 animations:^{ 
     [cell setFrame:CGRectMake(cell.frame.origin.x - 100, cell.frame.origin.y, cell.bounds.size.width, cell.bounds.size.height)]; 
    } completion:^(BOOL finished) { 
     [UIView animateWithDuration:0.5 animations:^{ 
      [cell setFrame:CGRectMake(cell.frame.origin.x + 100, cell.frame.origin.y, cell.bounds.size.width, cell.bounds.size.height)]; 
     } completion:^(BOOL finished) { 
      [aLabel removeFromSuperview]; 
      aLabel = nil; 
     }]; 
    }]; 

} 

Sie diese Methode in viewDidAppear nach kurzer Zeit ..

UPDATE

Für Swift 3 nennen können Sie wie Referenz verwenden können :

func animateCell() { 
     var cell : UITableViewCell? 
     let indexPath = NSIndexPath(row: 1, section: 0) 
     cell = self.tableView.cellForRow(at: (indexPath as NSIndexPath) as IndexPath) 

     var aLabel : UILabel! = UILabel() 
     //aLabel.translatesAutoresizingMaskIntoConstraints = false 
     aLabel.frame = CGRect(x: (cell?.bounds.size.width)!, y: 0, width: 400, height: (cell?.bounds.height)!) 
     cell?.clipsToBounds = false 
     print(aLabel.frame) 
     aLabel!.text = "Delete" 
     aLabel!.backgroundColor = UIColor.red 
     print(aLabel.frame) 
     aLabel.textColor = UIColor.white 
     cell?.addSubview(aLabel) 


     UIView.animate(withDuration: 0.5, animations: { 
      cell?.frame = CGRect(x: (cell?.frame.origin.x)! - 100, y: (cell?.frame.origin.y)!, width: (cell?.bounds.size.width)!, height: (cell?.bounds.size.height)!) 

      }) { (finished: Bool) in 
       UIView.animate(withDuration: 0.5, animations: { 
        cell?.frame = CGRect(x: (cell?.frame.origin.x)! + 100, y: (cell?.frame.origin.y)!, width: (cell?.bounds.size.width)!, height: (cell?.bounds.size.height)!) 

        }, completion: { (finished: Bool) in 
         aLabel.removeFromSuperview() 
         aLabel = nil 
       }) 
     } 
    } 
+0

Ich hatte dies in Swift ohne viel Erfolg umgeschrieben. Ich habe meine schnelle Neufassung gepostet und kommentiert den Punkt, an dem der Absturz auftritt. Macht es dir etwas aus, mir einen Tipp zu geben, was ich tun könnte. – Gugulethu

Verwandte Themen