2016-12-20 3 views
0

Ich habe eine TableView. Es ist nicht der TableViewController. Auf meinem ViewController habe ich ein TableView mit 15 Optionen. Ich kann jede Option ohne Probleme auswählen. Ich möchte also eine Schaltfläche verwenden, die nicht innerhalb des View-Controllers liegt, und wenn ich sie ausgewählt habe, bestimmt sie, welche Zeile der Tabelle ausgewählt ist. Für den Moment habe ich nur eine Warnmeldung mit welcher Zeile ausgewählt ist.Swift: Verwenden Sie eine Schaltfläche außerhalb einer Tabellenansicht und überprüfen Sie, welche Zeile ausgewählt wurde

Grundsätzlich ist jede Zeile der Tabelle eine andere Rasse: Zwerg, Elf, ect ... Direkt unter der Tabellenansicht befindet sich eine Schaltfläche. Wenn ich auf diese Schaltfläche klicke, erscheint eine Warnung, die angibt, welche Zeile ausgewählt wurde.

Hier ist, was ich bisher:

class raceViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 
{ 

    @IBOutlet var raceInfoBtn: UIButton! 
    @IBOutlet var raceTable: UITableView! 

    // defines an array with the races 
    let races = ["Dwarf", "Elf","Gnome","Half-Elf","Half-Orc","Halfling","Human", // core races 
       "Ifrit","Oread","Sylph","Tengu","Undine", // featured races 
       "Kitsune","Nagaji","Wayang"] // uncommon races// uncommon races 

    // defines the stats array to correspond to the races array 
    let stats = ["+2 Con & Wis, -2 Chr","+2 Dex & Int, -2 Con","+2 Con & Dex, -2 Str","Click to add","Click to add","+2 Dex & Chr, -2 Str","Click to add", // core races 
       "+2 Dex & Chr, -2 Wis","+2 Str & Wis, -2 Chr","+2 Dex & Int, -2 Con","+2 Dex & Wis, -2 Str","+2 Dex & Wis, -2 Str", // featured races 
       "+2 Dex & Chr, -2 Str","+2 Str & Chr, -2 Int","+2 Dex & Int, -2 Chr"] // uncommon races// uncommon races] //core 

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

    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    { 
     let cell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "raceCell") 
     //cell.textLabel?.text = races[indexPath.row] + stats[indexPath.row] 
     cell.textLabel?.text = races[indexPath.row] 
     cell.detailTextLabel?.text = stats[indexPath.row] 

     return (cell) 
    } 

    @IBAction func raceInfoBtn(_ sender: Any) 
    { 
     { 
      let alertController = UIAlertController(title: "iOScreator", message: 
       "dwarf", preferredStyle: UIAlertControllerStyle.alert) 
      alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default,handler: nil)) 

      self.present(alertController, animated: true, completion: nil) 
     } 
    } 

} 

Im IBAction raceInfoBtn ist, wo ich es, welche Zeile überprüfen möchten tatsächlich ausgewählt wurde.

Antwort

1

raceTable.indexPathForSelectedRow sollten Sie den ausgewählten Indexpfad angeben, mit dem Sie die korrekten Informationen in Ihrem Alert anzeigen können.

+0

süßen dank. Ich brauchte einen Moment, um es herauszufinden. Ich habe gerade einen Ausdruck davon gemacht, der auf die Konsole schaute. Jetzt geht es weiter zur nächsten Sache. – Micheal

0

wie ich verstanden habe, haben Sie 15 Wahl und jede Zeile hat eine eigene Taste, so 15 Taste ist da. möchten Sie auf TouchUpInside-Ereignis erhalten die ausgewählten Zeilen erhalten.

so müssen Sie Schaltfläche in der Inhaltsansicht TableView Zelle hinzufügen.

Jetzt in CellForIndexPath Methode müssen Sie AddTarget bei Ihrer Funktion, und geben Sie das Tag als IndexPath.row.

Zugriff jetzt auf jede ausgewählte Zeile als Tag des Absenders !!

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    let cell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "raceCell") 
    //cell.textLabel?.text = races[indexPath.row] + stats[indexPath.row] 
    cell.textLabel?.text = races[indexPath.row] 
    cell.detailTextLabel?.text = stats[indexPath.row] 
    cell.yourButton.addTarget(self, action: #selector(raceInfoBtn), for: .touchUpInside) 
    cell.yourButton.tag = indexPath.row 
    return (cell) 
} 

@IBAction func raceInfoBtn(_ sender: UIButton) 
{ 
    { 
     let alertController = UIAlertController(title: "iOScreator \(sender.tag)", message: 
      "dwarf", preferredStyle: UIAlertControllerStyle.alert) 
     alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default,handler: nil)) 

     self.present(alertController, animated: true, completion: nil) 
    } 
} 
+0

Das ist nicht einmal im Entferntesten richtig. Ich habe einen Knopf, der NICHT Teil der Tabellenansicht ist. Samantha, löste es für mich oben. – Micheal

+0

akzeptiere obige Antwort und schließe sie! –

Verwandte Themen