2017-09-07 2 views
2

Ich bin nicht in der Lage, den mehrfach ausgewählten Zeilen Text in ein Array zu erhalten, indem Sie Häkchen in Stack-Überlauf gesucht, aber nicht implementieren kann mir jemand helfen, wie man den Text in einem Array bekommen?Wie bekomme ich den Text von den ausgewählten Zellen in einer Tabellenansicht?

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return productName.count 
    } 
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "filterSelectionCell", for: indexPath) as! FilterSelectionCell 
     activityIndicator.stopAnimating() 
     activityIndicator.hidesWhenStopped = true 
     tableDetails.isHidden = false 
     cell.brandProductName.text = productName[indexPath.row] 
     return cell 
    } 
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ 
     if let cell = tableView.cellForRow(at: indexPath as IndexPath) { 
      if cell.accessoryType == .checkmark{ 
       cell.accessoryType = .none 
      } 
      else{ 
       cell.accessoryType = .checkmark 
      } 
     } 
    } 

hier ist das Bild für die

enter image description here

+1

Holen Sie sich die Daten im Array angehängt hatten eher als von der Zelle (** view **). Fügen Sie dem Modell eine 'ausgewählte' Eigenschaft hinzu und setzen Sie den accessoryType in' cellForRow' entsprechend. Um alle ausgewählten Zellen zu erhalten, filtern Sie das Datenquellen-Array einfach mit 'selected == true'. – vadian

Antwort

0

Hier ist meine Antwort mit dem folgenden Code, den Sie die ausgewählten Strings aus dem Array löschen, die Sie zuvor von der Datenquelle (** Modell **)

var values = [String]() 
var selected: Bool 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ 
     selected = false 
     if let cell = tableView.cellForRow(at: indexPath as IndexPath) { 
      if cell.accessoryType == .checkmark{ 
       cell.accessoryType = .none 
       print("\(productName[indexPath.row])") 
       values = values.filter{$0 != "\(productName[indexPath.row])"} 
       selected = true 
       print(values) 
      } 
      else{ 
       cell.accessoryType = .checkmark 
      } 
     } 
     if selected == true{ 
      print(values) 
     } 
     else{ 
      getAllTextFromTableView() 
     } 

    } 
    func getAllTextFromTableView() { 
    guard let indexPaths = self.tableDetails.indexPathsForSelectedRows else { // if no selected cells just return 
    return 
    } 

    for indexPath in indexPaths { 
     values.append(productName[indexPath.row]) 
     print(values) 
    } 
    } 
0

Sie ein Array von Produktdaten für die Tabelle des Quellobjekte anstelle eines Arrays von Namen verwendet werden soll. Jedes Produkt würde einen Namen und einen Bool-Wert haben, um zu sagen, ob es ausgewählt ist oder nicht.

Die Suche nach den ausgewählten Produkten wäre dann einfach und - wichtiger - Sie würden die Benutzeroberfläche nicht als Datenmodell verwenden, um zu erfahren, ob etwas ausgewählt wurde.

1

Verwenden indexPathsForSelectedRows Eigenschaft des UITableView

können Sie alle indexPaths der ausgewählten Zeilen bekommen und dann über die Anordnung dieser indexPaths zu integrieren und Ihre Texte aus dem Daten-Set (product Array in Ihrem Fall) holen.

So:

fun getAllTextFromTableView() { 
    guard let indexPaths = self.tableView.indexPathsForSelectedRows else { // if no selected cells just return 
    return 
    } 

    for indexPath in indexPaths { 
    print("\(productName[indexPath.row])") //Here you get the text of cell 
    } 
} 

Korsikas Sie benötigen @IBOutlet auf den Tisch Blick haben, um ihm Zugang in die Funktion.

+0

Ich muss die Elemente in einem Array bekommen, wie man es als Array bekommt? @Sergey Pekar –

+0

habe es nicht nötig, aber wenn ich es deaktivieren, wie es aus dem Array löschen? @Sergey Pekar –

+0

Atlast Ich habe es für löschen auch danke bro @Sergey Pekar –

Verwandte Themen