swift _ 推入 ViewController 会出现黑屏
swift _ Pushing ViewController in gives a black screen
我有两个屏幕,第一个“ViewController”有 tableview,第二个“MapViewController”包含 MKMapView,当我从第一个导航到第二个时,第二个看起来像黑屏第二屏应该出现apple map 谁能帮帮我?
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)
}
}
地图ViewController
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
。
我有两个屏幕,第一个“ViewController”有 tableview,第二个“MapViewController”包含 MKMapView,当我从第一个导航到第二个时,第二个看起来像黑屏第二屏应该出现apple map 谁能帮帮我?
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)
}
}
地图ViewController
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
。