2017-05-17 40 views
0

我试图像你这些图像将数据传递迅速的UIViewController 3

enter image description here

此看到通过,在每一个细胞到一个UIViewController的信息是的UITableViewController的代码:

import UIKit 
import MapKit 
import CoreLocation 

class CourseClass: UITableViewController, CLLocationManagerDelegate { 


    @IBOutlet weak var map: MKMapView! 

    let manager = CLLocationManager() 

    var place = ["Caffè Spagar", "Duks", "Posta station", "Barnum", "Elephant Club", "Cinema", "Space", "Andromeda", "Rodolf", "Devil Chair"] 
    var rows = 0 





    override func viewDidLoad() { 
     super.viewDidLoad() 

     manager.delegate = self 
     manager.desiredAccuracy = kCLLocationAccuracyBest 
     manager.requestWhenInUseAuthorization() 
     manager.startUpdatingLocation() 

    } 



    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 

     insertRowsMode3() 
    } 


    func insertRowsMode2() { 

     for i in 0..<place.count { 
      insertRowMode2(ind: i, str: place[i]) 
     } 

    } 

    func insertRowMode2(ind:Int,str:String) { 

     let indPath = IndexPath(row: ind, section: 0) 

     rows = ind + 1 
     tableView.insertRows(at: [indPath], with: .right) 
    } 



    func insertRowsMode3() { 

     rows = 0 

     insertRowMode3(ind: 0) 
    } 




    func insertRowMode3(ind:Int) { 
     let indPath = IndexPath(row: ind, section: 0) 
     rows = ind + 1 
     tableView.insertRows(at: [indPath], with: .right) 


     guard ind < place.count-1 else { return } 
     DispatchQueue.main.asyncAfter(deadline: .now()+0.15) { 

      self.insertRowMode3(ind: ind+1) 
     } 
    } 



    override func numberOfSections(in tableView: UITableView) -> Int { 

     return 1 
    } 


    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     return rows 
    } 



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

     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyTableViewCell 

     cell.myImage.image = UIImage(named: (place[indexPath.row] + ".png")) 
     cell.myLabel.text = place[indexPath.row] 

     return (cell) 
    } 





    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

     performSegue(withIdentifier: "goToLast" , sender: place[indexPath.row]) 

    } 


    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
     return 100 
    } 








    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

     let location = locations[0] 
     let span:MKCoordinateSpan = MKCoordinateSpanMake(0.01, 0.01) 

     let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude) 
     let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span) 
     map.setRegion(region, animated: true) 

     self.map.showsUserLocation = true 


    } 





    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     let guest = segue.destination as! FinalClass 

     guest.local = sender as! String 




    } 







    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

,这是的UIViewController的代码:

import UIKit 

class FinalClass: UIViewController { 


    @IBOutlet weak var lastLabel: UILabel! 

    @IBOutlet weak var addressLabel: UILabel! 

    @IBOutlet weak var typeLabel: UILabel! 

    @IBOutlet weak var lastImage: UIImageView! 


    var local = "Zone" 
    var localImage = UIImage() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     lastLabel.text = local 
     addressLabel.text = local 
     typeLabel.text = local 

     lastImage.image = localImage 


    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func lastBack(_ sender: Any) { 

    dismiss(animated: true, completion: nil) 
    } 

} 

现在我只能通过“名称”,但没有休息,有人可以帮我一些例子的代码?

+1

您只有数据源中的名称。要有更多的参数,你需要一个自定义的结构或类作为模型。 – vadian

+0

谢谢@vadian – bero

回答

0

正确的做法是通过准备segue函数来传递信息。您可以在FinalClass定义属性,您引用传递给

在你tableviewController

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "goToLast" { 
     guard let vc = segue.destination as? FinalClass else { return } 
     // set properties in your destination VC 
     // Example 
     // vc.photoProperty = photoFromTheTableViewController 
    } 
} 
+0

海报已经在代码中准备了(for segue :)。 –

+0

海报正在使用强制downcasts。 –

+0

...这是一个不好的做法。但这也不是海报问的问题。 –

0

prepare(for segue:),设置目标视图控制器的localImage财产。

镜像用于填充单元格中的代码,这将是:

guest.localImage = UIImage(named: (sender as! String) + ".png") 

但我vadian的评论表示赞同:我想你会更快乐,从长远来看,一个地方构造,封装必要的数据。使用地名作为钥匙对我来说感觉很脆弱。

+0

工作感谢@Joshua Kaden – bero

+0

非常好!听到那个消息很开心。 –

0
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    let guest = segue.destination as! FinalClass 

    guest.local = sender as! String 
    guest.localImage = UIImage(named: (sender + ".png")) 

} 

对于地址,您可以从用户当前位置调用Google place API,我不知道关于电话和网站。

+0

你不应该使用!在庄园里,你在这里使用它。这是一个沮丧的力量,并有可能造成难题。 –