微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift _ 推入 ViewController 会出现黑屏

如何解决swift _ 推入 ViewController 会出现黑屏

enter image description here

我有两个屏幕,第一个“ViewController”有tableview,第二个“MapViewController”包含MKMapView,当我从第一个导航到第二个时,第二个看起来像黑屏,第二个屏幕应该出现苹果地图有人可以帮我吗?

 import UIKit
import  MapKit
struct Category {
    let place : String
    let coordinates  : [Double]
}
class ViewController: UIViewController {
    
    private let tableview : UITableView={
        let table = UITableView()
        table.register(UITableViewCell.self,forCellReuseIdentifier: "cell")
        return table
        
    }()
    private let data : [Category]=[
    Category(place: "Misr bank ",coordinates: [30.576352,31.503955])

    ]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(tableview)
        tableview.delegate=self
        tableview.dataSource=self
    }
    
    override func viewDidLayoutSubviews() {
        tableview.frame=view.bounds
    }


}

extension ViewController:UITableViewDelegate{
    func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath,animated: true)
        let category = data[indexPath.row]
        let mapview = MapViewController(coor: category.coordinates)
        self.navigationController?.pushViewController(mapview,animated: true)
    }
}

地图视图控制器

    import UIKit
import MapKit
class MapViewController: UIViewController {

    
    @IBOutlet weak var map: MKMapView!
    private let coor : [Double]
    
    init(coor:[Double]){
        self.coor=coor
        super.init(nibName: nil,bundle: nil)
        
        let lat = coor[0]
        let long = coor[1]
        print(lat)
        print(long)

    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        
    }

解决方法

看起来 MapViewController 是在故事板中设计的。 (如果不是,您就不会谈论@IBOutlet weak var map: MKMapView!

但如果是这样,那么说 MapViewController(coor: category.coordinates) 不是如何检索您在故事板中设计的实例。如果你这么说,你确实会得到一个基本上是空的界面。

相反,在情节提要中为该实例提供一个标识符,并在您的代码中要求情节提要实例化具有该标识符的视图控制器。

您还必须完全重新安排初始化。故事板将调用 init(coder:),而不是 init(coor:)。事实上,你可以完全摆脱后者:

@IBOutlet weak var map: MKMapView!
var coor = [Double]()
required init?(coder: NSCoder) {
    super.init(coder:coder)
}
override func viewDidLoad() {
    super.viewDidLoad()
    let lat = coor[0]
    let long = coor[1]
    print(lat)
    print(long)
}

现在,当您从情节提要中实例化 MapViewController 时,还要在推送之前立即设置 mapView.coor

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?