Uczę się szybko i mam problemy z odpaleniem ruchu, gdy dotknie się TableViewCell, który ma przekazać adres URL do drugiego widoku, który na razie tylko wyświetla to na etykiecie. i Dynamicznie tworzyć (widziałem ludzi używają programowo, co jest prawdopodobnie właściwym słowem) w każdej pojedynczej komórce, więc w scenorysie nie mam żadnego obiektu do połączenia z innym widokiem z wyjątkiem samego widoku ... i to jest co ja zrobiłem. Więc podłączyłem pierwszy kontroler widoku do drugiego, i dodałem kod, aby wykonać segue.Swift - Segue na Dynamic TableCell
Nie jestem pewien, czy to prawda, moja wiedza pochodzi z samouczków, które nie wyjaśniały dokładnie, co chciałem zrobić.
tam jest kod z dwóch widoków.
pierwszy widok
import UIKit
protocol sendInfoDelegate{
func userDidEnterInfo(WhichInfo info : String)
}
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var tableData = []
@IBOutlet weak var redditListTableView: UITableView!
var selectedCellURL : String?
var delegate : sendInfoDelegate? = nil
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// change the link to change the json source
getRedditJSON("http://www.reddit.com/.json")
}
//
//Creates a connection via a task (networktask) then parses the json
//
func getRedditJSON(whichReddit : String){
let mySession = NSURLSession.sharedSession()
let url: NSURL = NSURL(string: whichReddit)
let networkTask = mySession.dataTaskWithURL(url, completionHandler : {data, response, error -> Void in
var err: NSError?
var theJSON = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSMutableDictionary
let results : NSArray = theJSON["data"]!["children"] as NSArray
dispatch_async(dispatch_get_main_queue(), {
self.tableData = results
self.redditListTableView.reloadData()
})
})
networkTask.resume()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//needs to be implemented
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tableData.count
}
//creates the whole table
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "MyTestCell")
let redditEntry : NSMutableDictionary = self.tableData[indexPath.row] as NSMutableDictionary
cell.textLabel?.text = redditEntry["data"]!["title"] as? String
cell.detailTextLabel?.text = redditEntry["data"]!["author"] as? String
return cell
}
// action to be taken when a cell is selected
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let redditEntry : NSMutableDictionary = self.tableData[indexPath.row] as NSMutableDictionary
self.selectedCellURL = redditEntry["data"]!["url"] as? String
self.performSegueWithIdentifier("passInfo" , sender: indexPath)
println(self.selectedCellURL!)
if delegate != nil {
let information:String = self.selectedCellURL!
println("ciao")
delegate?.userDidEnterInfo(WhichInfo: information)
self.navigationController?.popViewControllerAnimated(true)
}
Drugi pogląd
import UIKit
class WebPageController : UIViewController, sendInfoDelegate {
var infoFromSVC: String?
@IBOutlet weak var labelVC: UILabel!
func userDidEnterInfo(WhichInfo info: String) {
self.infoFromSVC = info
labelVC.text = infoFromSVC
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "passInfo"{
let firstVController : ViewController = segue.destinationViewController as ViewController
firstVController.delegate = self
}
}
}
Dzięki.
Jak można odzyskać właściwość danych drugiego kontrolera widoku od pierwszego? pierwszy kontroler widoku nie wie, jakie właściwości ma drugi kontroler widoku. – DeepVinicius
Należy odrzucić element sterue.destinationViewController do kontrolera SecondView. Wprowadziłem potrzebne modyfikacje do mojej odpowiedzi –