2017-12-30 22 views
0

Ich denke, das könnte einer meiner Anfängerfehler sein, die ich nicht herausfinden konnte.Tabelle View Daten erscheint auf Tabellenansicht mit Zeilenauswahl Code

Ich habe eine App, die eine Tabellenansicht hat. Es hat Text Label und Detail Text Label.

Wenn ich eine Zeile auswähle, bringe ich mich zu einem anderen Storyboard, das segue verwendet ... das alles funktioniert gut außer der Tabellenansicht auf meinem Simulator.

Detail Text Label zeigt sich auf dem Simulator in diesem Bild eingekreist.

Hier ist der Code, den ich verwende, um Zelle/Zeile zu erkennen. Wenn ich es kommentiere, geht dieses Problem weg ...

Was Sie im roten Kreis sehen, ist gradeelected was auch in der Detailtextbeschriftung in der Tabellenansicht ist.

func sectionIndexTitles(for tableView: UITableView) -> [String]? { 
    let gradeselected = String(describing: sgrade) 
    return [gradeselected] 
} 

Screenshot von Simulator mit dem Thema

enter image description here

Bitte helfen Sie dieses Problem bei der Lösung. Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

Xcode 9.1 Swift 4

@Caleb hier ist mein Code.

import UIKit 

class StudentsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 


    @IBOutlet weak var cellButton: UIButton! 

    @IBOutlet weak var studentDetailTable: UITableView! 
    var sname:[String]? 
    var sgrade:[Int]? 

    var gradetext = "Grade:" 
    var sstudentname = "" 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     studentDetailTable.delegate = self 
     studentDetailTable.dataSource = self 

     // Do any additional setup after loading the view. 
    } 


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return sname!.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = studentDetailTable.dequeueReusableCell(withIdentifier: "cell") 

     cell?.textLabel?.text = sname[indexPath.row] + gradetext + String(sgrade[indexPath.row]) 
     sstudentname = sname![indexPath.row] 


     cell?.detailTextLabel?.text = String(sgrade![indexPath.row]) 
     cell?.layer.cornerRadius = (cell?.frame.height)!/2 
     cell?.backgroundColor = UIColor.blue 
     cell?.textLabel?.textColor = UIColor.white 
     cell?.layer.borderWidth = 6.0 
     cell?.layer.cornerRadius = 15 
     cell?.layer.borderColor = UIColor.white.cgColor 
     cell?.textLabel?.textColor = UIColor.white 

     return cell! 
    } 



    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     let selectedIndex = tableView.dataSource?.sectionIndexTitles!(for: studentDetailTable) 
     let indexPath = tableView.indexPathForSelectedRow 
     let currentCell = tableView.cellForRow(at: indexPath!)! 
     let scell = currentCell.detailTextLabel!.text! 
     sstudentname = (currentCell.textLabel?.text)! 
    } 


// - If I comment this section of the code issue goes away. 

    func sectionIndexTitles(for tableView: UITableView) -> [String]? { 
     let gradeselected = String(describing: sgrade) 
     return [gradeselected] 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     let myKLVC = segue.destination as! KindergartenLevelViewController 
     myKLVC.klvstudentname = sstudentname 

    } 
+0

Zeigen Sie Ihre Storyboard-Benutzeroberfläche für diesen Bildschirm an. –

+0

Sie sollten didSelectetRowAtIndexPath eine Delegate-Methode von IUTableView verwenden, die Ihnen sagt, welche Zelle Sie angetippt haben – Vikky

+0

Was ist Ihre 'sgrade' Variable? Warum konvertierst du es mit 'String (beschreibend)' in 'String'? Und warum gibst du ein Array zurück, das nur diese eine Saite enthält? Beachten Sie, dass die 'sectionIndexTitles' nichts mit einer Zelle oder einer ausgewählten Zeile zu tun haben. – rmaddy

Antwort

0

Der Text im roten Kreis sagt [1, 2], die wie die Array sieht wahrscheinlich, dass alle hält die Noten, nicht nur die für eine bestimmte Zelle, die wir in der Zeichenfolge gradeselected sehen. Wenn Sie in Ihrem Code ein solches Array haben, suchen Sie nach Stellen, an denen Sie es möglicherweise in eine Zeichenfolge konvertieren und zeichnen. Vielleicht haben Sie das in einer früheren Iteration Ihres Codes getan, um sicherzustellen, dass das Array enthielt, was Sie dachten, oder so?

Arrays zeichnen sich nicht nur auf mysteriöse Weise auf dem Bildschirm ab - irgendwo gibt es einen Code, der dafür verantwortlich ist. Wir können Ihnen nicht wirklich helfen, es zu finden, weil Sie nicht viel von Ihrem Code gezeigt haben, aber nur zu wissen, wonach Sie suchen sollten, kann Ihnen helfen, es selbst zu finden.

+0

Lesen Sie die Dokumentation und Sie werden sehen, warum das Array angezeigt wird. Hier ist der Link wieder: https://developer.apple.com/documentation/uikit/uitableviewdatasource/1614857-sectionindexestitles –

+1

@Caleb Wie Sie sagten, bekommt gradeelected seinen Wert von einem Array namens sgrade. – iosappdevguy

-2

Sie können die ausgewählten Zeile über Unterkunft Tabellenansicht indexPathForSelectedRow abfragen.

Die von Ihnen implementierte Methode macht genau das, was Sie im Simulator sehen.

haben Sie einen Blick auf die Dokumentation:

Eigenschaft indexPathForSelectedRow: https://developer.apple.com/documentation/uikit/uitableview/1615000-indexpathforselectedrow

func sectionIndexTitles: https://developer.apple.com/documentation/uikit/uitableviewdatasource/1614857-sectionindextitles

+0

Erste fertige Frage richtig und verstehe es und antworte dann. Schreib nichts über Luft. Lesen Sie hierzu [Wie schreibe ich eine gute Antwort?] (Https://stackoverflow.com/help/how-to-answer) –

+0

F: "Hier ist der Code, den ich verwende, um die ausgewählte Zelle/Zeile zu erkennen." –

+0

Mit dieser Funktion können Sie die ausgewählte Zeile nicht erkennen. –

Verwandte Themen