如何实例化/显示 TableViewController
how to instantiate/ show a TableViewController
我已经为这个糟糕的项目苦苦挣扎了两个星期,但似乎没有任何效果。我必须做一个应用程序,从服务器加载一些单词并将它们显示为地图 (MKView) 上的图钉。当用户缩小时,我必须将图钉聚集在一起,为此我使用了一个用 Objective-C 编写的第三方库,但我还必须制作一个带有按钮的自定义标注视图。当用户按下上述按钮时,应用程序应该转到 TableViewController,这是我的问题:我做不到。我以前用过 "performSegueWIthIdentifier",效果很好,但现在我得到错误 "there is no segue with '---' identifier"。我知道还有很多其他线程与此相关,但是 none 的解决方案对我有用。此外,我试图以编程方式实例化 ViewController ,但这也不起作用,因为我得到了 "unexpectedly found nil..." 并且我不知道该怎么做。
我知道我做错了什么,很可能是我如何调用这些函数,但我不知道是什么。这是我到目前为止尝试过的方法:
在 .xib 文件中我有这个:
import UIKit
class MarkerInfoView: MKAnnotationView {
@IBOutlet weak var theButton: UIButton!
@IBAction func readIt(sender: AnyObject) {
ViewController.goToArticles()
}
}
并在 ViewController 中:
class func goToArticles(){
ViewController().reallyGoToArticles()
}
我这样做是因为我找不到其他方法来调用 performSegueWithIdentifier 或 presentViewController
func reallyGoToArticles(){
println("let's go!")
let theArticlesSB = UIStoryboard(name: "Main", bundle: nil)
let vc = theArticlesSB.instantiateViewControllerWithIdentifier("theArticles") as! articlesViewController
self.presentViewController(vc, animated: true, completion: nil)
self.performSegueWithIdentifier("showArticles", sender: self)
}
为了向您展示,我取消了两个选项的注释。
我已经上传了项目here
非常感谢!
更新
我忘了说如果我把那行
self.performSegueWithIdentifier("showArticles", sender: self)
在 viewDidLoad 中有效
我查看了您的项目并发现了您的问题。
在 MarkerInfoView.swift
中,您调用 ViewController.goToArticles()
这是一个 class 函数:
class func goToArticles(){
ViewController().reallyGoToArticles()
}
这个 class 函数创建了一个 ViewController
的新实例,它与故事板无关(并且不知道 segues)。
您必须从
这样的实例方法调用 self.reallyGoToArticles()
func goToArticles(){
self.reallyGoToArticles()
}
您必须设法从您的 MarkerInfoView
调用现有的 ViewController
编辑:这是实现方法
MarkerInfoView.swift
class MarkerInfoView: MKAnnotationView {
var vc: ViewController!
@IBOutlet weak var placePhoto: UIImageView!
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var detailsLabel: UILabel!
@IBOutlet weak var theButton: UIButton!
@IBAction func readIt(sender: AnyObject) {
vc.goToArticles()
}
}
ViewController.swift
func mapView(mapView: MKMapView!, didSelectAnnotationView annotation: MKAnnotationView!)
{
if let pin = annotation.annotation as? CustomPointAnnotation{
if var infoView = UIView.viewFromNibName("MarkerInfoView") as? MarkerInfoView {
infoView.nameLabel.text = pin.theTitle
infoView.detailsLabel.text = pin.theDetails
infoView.vc = self
infoView.center = CGPointMake(self.view.bounds.width/2, self.view.bounds.height/2)
self.view.addSubview(infoView)
} else {
}
}
}
func goToArticles(){
self.reallyGoToArticles()
}
我已经为这个糟糕的项目苦苦挣扎了两个星期,但似乎没有任何效果。我必须做一个应用程序,从服务器加载一些单词并将它们显示为地图 (MKView) 上的图钉。当用户缩小时,我必须将图钉聚集在一起,为此我使用了一个用 Objective-C 编写的第三方库,但我还必须制作一个带有按钮的自定义标注视图。当用户按下上述按钮时,应用程序应该转到 TableViewController,这是我的问题:我做不到。我以前用过 "performSegueWIthIdentifier",效果很好,但现在我得到错误 "there is no segue with '---' identifier"。我知道还有很多其他线程与此相关,但是 none 的解决方案对我有用。此外,我试图以编程方式实例化 ViewController ,但这也不起作用,因为我得到了 "unexpectedly found nil..." 并且我不知道该怎么做。
我知道我做错了什么,很可能是我如何调用这些函数,但我不知道是什么。这是我到目前为止尝试过的方法:
在 .xib 文件中我有这个:
import UIKit
class MarkerInfoView: MKAnnotationView {
@IBOutlet weak var theButton: UIButton!
@IBAction func readIt(sender: AnyObject) {
ViewController.goToArticles()
}
}
并在 ViewController 中:
class func goToArticles(){
ViewController().reallyGoToArticles()
}
我这样做是因为我找不到其他方法来调用 performSegueWithIdentifier 或 presentViewController
func reallyGoToArticles(){
println("let's go!")
let theArticlesSB = UIStoryboard(name: "Main", bundle: nil)
let vc = theArticlesSB.instantiateViewControllerWithIdentifier("theArticles") as! articlesViewController
self.presentViewController(vc, animated: true, completion: nil)
self.performSegueWithIdentifier("showArticles", sender: self)
}
为了向您展示,我取消了两个选项的注释。
我已经上传了项目here
非常感谢!
更新
我忘了说如果我把那行
self.performSegueWithIdentifier("showArticles", sender: self)
在 viewDidLoad 中有效
我查看了您的项目并发现了您的问题。
在 MarkerInfoView.swift
中,您调用 ViewController.goToArticles()
这是一个 class 函数:
class func goToArticles(){
ViewController().reallyGoToArticles()
}
这个 class 函数创建了一个 ViewController
的新实例,它与故事板无关(并且不知道 segues)。
您必须从
self.reallyGoToArticles()
func goToArticles(){
self.reallyGoToArticles()
}
您必须设法从您的 MarkerInfoView
ViewController
编辑:这是实现方法
MarkerInfoView.swift
class MarkerInfoView: MKAnnotationView {
var vc: ViewController!
@IBOutlet weak var placePhoto: UIImageView!
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var detailsLabel: UILabel!
@IBOutlet weak var theButton: UIButton!
@IBAction func readIt(sender: AnyObject) {
vc.goToArticles()
}
}
ViewController.swift
func mapView(mapView: MKMapView!, didSelectAnnotationView annotation: MKAnnotationView!)
{
if let pin = annotation.annotation as? CustomPointAnnotation{
if var infoView = UIView.viewFromNibName("MarkerInfoView") as? MarkerInfoView {
infoView.nameLabel.text = pin.theTitle
infoView.detailsLabel.text = pin.theDetails
infoView.vc = self
infoView.center = CGPointMake(self.view.bounds.width/2, self.view.bounds.height/2)
self.view.addSubview(infoView)
} else {
}
}
}
func goToArticles(){
self.reallyGoToArticles()
}