2017-01-28 8 views
1

Hallo Ich versuche, eine einfache Chat-Anwendung zu erstellen, wo Benutzer Nachrichten und Fotos senden können. Mir fällt es schwer, herauszufinden, wie man mehrere Nachrichten bei längerem Drücken einer einzelnen Nachricht am besten auswählt und löscht.So wählen und löschen Sie Nachrichten wie whatsapp oder iMessage auf ios mit swift

Ich habe Sammlungsansicht verwendet, um die Seite anzuzeigen. Momentan verwende ich die Sammlungsansicht didSelect-Methode, um auf die Seite der Chat-Bubble-Bildansicht zu klicken und die Schaltfläche für diese bestimmte Zelle auszuwählen. Aber ich kann keine Kontrollkästchen für jede Nachricht anhängen. Ich kann auch nicht lange auf die Chat-Blase Bildansicht drücken.

Ich habe auch versucht, Bildanzeige Tippen Sie auf Chat-Blase, aber mit diesem muss ich die Sammlung anzeigen neu laden. Gibt es eine beste Möglichkeit, mehrere Nachrichten zu löschen?

Jede Hilfe ist willkommen

Dank

Im Folgenden finden Sie den Beispielcode

Code für das Kontrollkästchen Bild von bestimmten Zelle zu verändern.

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    inputTextField.endEditing(true) 
    let cell: ChatLogMessageCell? = collectionView.cellForItem(at: indexPath) as! ChatLogMessageCell? 
    cell?.checkbox.isHidden = false 
    selectAll = true 
    if cell?.isSelected == true{ 

     cell?.checkbox.image = UIImage(named: "checkedimage") 
    }else{ 

     cell?.checkbox.image = UIImage(named: "uncheckedimage") 
    } 

Code zum Tippen auf Chat-Blase, um Kontrollkästchen an alle Zellen anzuhängen.

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: chatcellId, for: indexPath) as! ChatLogMessageCell 
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.imageTapped)) 
    cell.bubbleImageView.addGestureRecognizer(tapGesture) 
    cell.bubbleImageView.isUserInteractionEnabled = true 

    if selectAll == true{ 
     cell.checkbox.isHidden = false 
    }else{ 
     cell.checkbox.isHidden = true 
    }} 

Wenn Sprechblase angezapft Sammlung Ansicht neu geladen wird die Checkbox-Taste, um alle Zellen

func imageTapped(){ 
    selectAll = true 
    self.collectionView?.reloadData() 
} 

Was ich schließlich versucht zu tun bin anhängen ist auswählen und Löschen von Nachrichten wie WhatsApp oder iMessage (Above Code ist in der Nähe von iMessage-Funktionalität) tut. Also bin ich auch offen für komplette Codeänderungen. Vielen Dank.

aktualisierten Code

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    let lpgr = UILongPressGestureRecognizer(target: self, 
        action: #selector(handleLongPress)) 
    lpgr.minimumPressDuration = 0.5 
    lpgr.delaysTouchesBegan = true 
    lpgr.delegate = self 
    self.collectionView?.addGestureRecognizer(lpgr) 

} 

func handleLongPress(gestureReconizer: UILongPressGestureRecognizer) { 
    let p = gestureReconizer.location(in: self.collectionView) 
    let indexPath = self.collectionView?.indexPathForItem(at: p) 

    if let index = indexPath { 
     let cell: ChatLogMessageCell? = collectionView?.cellForItem(at: index) as! ChatLogMessageCell? 
     self.collectionView?.allowsMultipleSelection = true 

     for cell in collectionView!.visibleCells as! [ChatLogMessageCell] { 
      let indexPath = collectionView?.indexPath(for: cell as ChatLogMessageCell) 

       cell.checkbutton.isHidden = false 

      if selectedMsgs.contains((messages?[((indexPath)?.item)!])!) { 
       cell?.checkbox.image = UIImage(named: "checkedimage") 
      } 
      else { 
       cell?.checkbox.image = UIImage(named: "uncheckedimage") 
      } 
     } 


    } else { 
     print("Could not find index path") 
    } 
} 

Auf lange drücken Kontrollkästchen erscheinen auf allen sichtbaren Zellen, sondern tippen Sie auf Chat-Blase funktioniert nicht.

+0

Sie könnten Vorschläge von diesem Beitrag http: // stackoverflow verwenden.com/questions/29241691/how-do-i-use-uilongpressgesture-recognizer-mit-einem-uicollectionviewcell-in-swift, um die Long-Press-Funktionalität zu erreichen – danielmhanover

+0

Vielen Dank @danielmhanover. Ich bin immer noch nicht in der Lage, die Auswahl im Chat-Blase funktionieren (Wenn ich neben der Sprechblase berühren, funktioniert die Auswahl). – Shravya

+0

Ist die Chat-Blase ein uiimageview? Achten Sie darauf, userInteractionEnabled auf "true" zu setzen. – danielmhanover

Antwort

1

Sie sollten eine UILongPressGestureRecognizer an jede Zelle in der Sammelansicht anfügen und den UICollectionviewcontroller als Ziel für jeden dieser Erkenner festlegen. Dann, wenn einer von ihnen ausgelöst wird, legen Sie eine benutzerdefinierte Eigenschaft Ihres CollectionViewController (vielleicht nennen Sie es editing oder etwas) auf True. Holen Sie dann alle sichtbaren Zellen mit der UICollectionView-Funktion visibleCells.

In Ihrer UICollectionViewCell Unterklasse, sollten Sie einige benutzerdefinierte Eigenschaft Getter/Setter-Methoden haben (vielleicht -editing und -setEditing:(BOOL)), die Sie jetzt anrufen können, wie Sie durch die Zellen in visibleCells laufen. Innerhalb Ihrer -setEditing:(BOOL) Funktion können Sie das Kontrollkästchen UIButton hinzufügen und entfernen, wie Sie möchten. Sie sollten auch den UICollectionView-Controller als Ziel dieses UIButton festlegen und innerhalb des UICollectionViewControllers verfolgen, welche Zellen ausgewählt sind. Wenn der Benutzer die Schaltfläche "Löschen" drückt, wissen Sie also, welche Nachrichten gelöscht werden sollen.

Ich würde auch empfehlen auschecken https://github.com/jessesquires/JSQMessagesViewController/, die all diese Logik für Sie tut.

+0

Erstens, Vielen Dank für die Zeit nehmen, um meine Frage zu beantworten. Ich habe die Chat-Blase UserInteraction aktiviert und UILongPressGestureRecognizer hinzugefügt. Ich benutze UILongPressGesture, um Checkbox-Buttons zu Zellen hinzuzufügen, und collectionview didselect, didselect, um die Checkbuttons an- oder abzuwählen. Aber wählen Sie auf Chat-Blase funktioniert immer noch nicht – Shravya

+0

die LongPress funktioniert, aber der Tipp zu wählen ist nicht? – danielmhanover

+0

ja Tipp zum Auswählen funktioniert nicht – Shravya

Verwandte Themen