Ich habe eine Schaltfläche Bearbeiten implementiert, die meiner UICollectionViewCell eine Schaltfläche hinzufügt. Wenn ich Edit = & gt; Bearbeiten wird zu "Fertig" und wenn ich Fertig drücke, soll es die Schaltfläche löschen. Mit meinem Code kann ich die Schaltflächen hinzufügen, aber nicht ausblenden. Irgendwelche Ideen?

 @IBAction func editButton(sender: AnyObject) {

if(editButton.titleLabel?.text as String! == "Edit")
  {

    editButton.setTitle("Done", forState: UIControlState.Normal)
    for item in self.mainCollectionView.visibleCells() as! [SettingsCollectionViewCell] {

        let indexpath : NSIndexPath = self.mainCollectionView!.indexPathForCell(item as SettingsCollectionViewCell)!
        let cell : SettingsCollectionViewCell = mainCollectionView!.cellForItemAtIndexPath(indexpath) as! SettingsCollectionViewCell

        //Close Button
        let close : UIButton = cell.collectionViewButton
        close.hidden = false
    }
} 
else 
{
    editButton.setTitle("Edit", forState: UIControlState.Normal)
    self.mainCollectionView?.reloadData()
 }}

Und cellForRowAtIndexPath:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
     {

    let collectionCell:SettingsCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("collectionCell", forIndexPath: indexPath) as! SettingsCollectionViewCell

      if self.editButton.titleLabel?.text as String! == "Edit" 
        {
          collectionCell.collectionViewButton.hidden = true
        }
     else if editButton.titleLabel?.text as String! == "Done"
        {
         collectionCell.collectionViewButton.hidden = false
        }

        collectionCell.collectionViewButton!.layer.setValue(indexPath.row, forKey: "index")
        collectionCell.collectionViewButton!.addTarget(self, action: "deletePhoto:", forControlEvents: UIControlEvents.TouchUpInside)

        return collectionCell
}
0
JVS 25 Dez. 2015 im 18:03

2 Antworten

Beste Antwort

Sie müssen die Logik in cellForItemAtIndexPath ändern, um den Titel von der Schaltfläche abzurufen.

Um Titeltext von der Schaltfläche abzurufen, müssen Sie titleForState(UIControlState) anstelle von titleLabel?.text verwenden.

Hier ist ein Codefragment für eine bedingte Anweisung in cellForItemAtIndexPath

if self.editButton.titleForState(.Normal) == "Edit" {
       collectionCell.collectionViewButton.hidden = true
}
else if self.editButton.titleForState(.Normal) == "Done" {
    collectionCell.collectionViewButton.hidden = false
}
1
deoKasuhal 25 Dez. 2015 im 16:16

Ich denke, die beste Strategie hier wäre, eine Schaltfläche im Haupt-Storyboard zu erstellen und im Kontextmenü der Schaltfläche "Ausgeblendet" zu aktivieren.

So ändern Sie den Text einer Schaltfläche: Erstellen Sie eine Steckdose (ja, eine Steckdose) für die Schaltfläche. @IBOutlet var editbutton: UIButton!

Dann, um es einzublenden:

editbutton.hidden = false

(Sie können dies auf Wunsch in eine if-Anweisung einfügen)

Führen Sie dies innerhalb einer Aktion der Schaltfläche aus (Sie müssen die Schaltfläche auch einer Aktion zuweisen), um die Schaltfläche auszublenden, wenn sie bereits auf "Fertig" gedrückt wurde:

if editbutton.title == "Done" && editbutton.hidden == false {
editbutton.hidden = true
}

So ändern Sie den Text der Schaltfläche, wenn noch "Bearbeiten" angezeigt wird:

if editbutton.title == "Edit" {
editbutton.title = "Done" 
}

Die Aktionen müssen in dieser Reihenfolge ausgeführt werden, sonst wird die Schaltfläche zu "Fertig" und nicht ausgeblendet, sodass der Computer sie ausblendet, bevor der Benutzer sie ein zweites Mal drückt.

1
owlswipe 25 Dez. 2015 im 17:22