如何实例化/显示 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()
    }