2015-06-11 5 views
27

Ich habe folgende onClick Funktionöffnen neue View-Controller von Cell in der Tabellenansicht klicken - Swift iOS

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    tableView.deselectRowAtIndexPath(indexPath, animated: true) 

    let row = indexPath.row 
    println("Row: \(row)") 

    println(meetingArray[row] as! String) 

} 

, die auf der Zelle den Text ausdruckt, die angeklickt wird. Es funktioniert gut.

Ich frage mich nur, wie Sie eine Funktion setzen würde, die Sie auf die neue View-Controller

Antwort

49

Programmatically richten würde:

let destination = UIViewController() // Your destination 
navigationController?.pushViewController(destination, animated: true) 

Storyboard:
Zuerst Sie haben um eine ID für Ihre Ansicht festzulegen. Im folgenden Screenshot sehen Sie, wo Sie den Identifikator eingeben müssen.

screenshot

Danach können Sie ein "Ziel" erstellen und an die Navigationssteuerung drücken, indem Sie den Code unten verwenden:

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) 
let destination = storyboard.instantiateViewController(withIdentifier: "YourViewController") as! YourViewController 
navigationController?.pushViewController(destination, animated: true) 

Segue:
Zuerst Sie haben um eine Kennung für Ihren Abschnitt wie folgt festzulegen:

segue1

segue2

performSegue(withIdentifier: "segue", sender: self) 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "segue" { 
     // Setup new view controller 
    } 
} 

EDIT: Aktualisiert für Swift 3.x

+0

Entschuldigung für meine Unerfahrenheit. Wie gebe ich an, welchen View Controller ich der "Ziel" -Konstante zuweise? –

+0

Haben Sie den View-Controller im Storyboard oder programmgesteuert erstellt? – Eendje

+0

Verwenden Sie einfach das Storyboard. Ich bin sehr neu und versuche, es so einfach wie möglich zu halten. Danke für die Hilfe. –

7

Im Storyboard, storyboardId Ihren Viewcontroller in Identity Inspector gesetzt.

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

tableView.deselectRowAtIndexPath(indexPath, animated: true) 

let row = indexPath.row 
println("Row: \(row)") 

println(meetingArray[row] as! String) 

let secondViewController = self.storyboard.instantiateViewControllerWithIdentifier("storyBoardIdFor your new ViewController") as SecondViewController 

self.navigationController.pushViewController(secondViewController, animated: true) 

} 
+0

Verwendung von undeclared Typ 'SecondViewController', was wäre der Grund für diesen Fehler? –

+0

ersetzen Sie SecondViewController mit was auch immer Ihr ViewController.your neuen View-Controller! –

+0

Ich liebe StoryboardID, es macht Code lesbar. –

0

Bei Verwendung

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 

Der Wert der ausgewählten Zeile zu einer anderen Ansicht Controller passieren zu spät. ist besser, die ausgewählte Zeile in dem func prepareForSegue wie unten zu passieren, zunächst eine globale Variable deklariert passiert Wert auf anderen Viewcontroller

var globalVar:Int 

In einer Storyboard-basierten Anwendung, Sie wird oft ein wenig Vorbereitung vor Navigation

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     // Get the new view controller using segue.destinationViewController. 
     // Pass the selected object to the new view controller. 
     let selectedIndex = self.tableView.indexPathForCell(sender as! UITableViewCell) 
     globalVar = selectedIndex!.row 
     print("tableView prepareForSegue: " + String(globalVar)) 

    } 
1

Für andere Benutzer auf diese Frage kommenden tun wollen, steuern, wenn Sie eine statische Zellen in einem UITableViewController haben, können Sie einfach per Drag vom ce ll zum neuen View Controller.

enter image description here

Sie können dies auch auf dynamische Zellen tun, wenn Sie keine Daten in den nächsten View-Controller übergeben müssen.Wenn Sie jedoch Daten weitergeben müssen, sollten Sie make the segue from the Table View's view controller itself and not the cell. Rufen Sie dann das Segment programmgesteuert auf.

+0

nur aus einer statischen Zelle ziehen scheint nicht für mich arbeiten. Ich verwende einen einfachen "Show" -Schnitt. Ich versuchte auch, es als "Zusatzaktion" ("Enthüllungsanzeige" in meinem Fall) anzugeben, ohne Erfolg – Antek

+0

ok, anscheinend war der Trick, Navigationssteuerpult als das Elternteil für den Tabellencontroller zu verwenden – Antek

Verwandte Themen