如何从UIView类的xib文件导航到ViewController

我在我的xib文件中包含button的视图。 我想要移动到ViewController,当我按下button(@IBAction) 。 我已经使用下面的代码

 let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("About") as! AboutViewController self.presentViewController(nextViewController, animated: true, completion: nil) 

我得到的错误“types'SlideMenuView'的值没有成员'presentViewController'。

因为我的类是一个UIViewtypes:

 class SlideMenuView: UIView { } 

所以如何导航到其他视图控制器。

这就是你正在试图呈现的类是一个UIView而不是一个UIViewController 。 它没有现在的方法。

我猜你的看法(SlideMenuView)是embedded在一个viewcontroller。 你需要做的是实现一个委托,并通知你的包含viewController呈现下一个ViewController。

代码如下:

 @protocol SlideMenuViewDelegate: class { func slideMenuViewAboutButtonClicked(menuView: SlideMenuView) class SlideMenuView: UIView { weak var delegate: SlideMenuViewDelegate? @IBAction func aboutButtonClicked(sender: AnyObject) { self.delegate?.slideMenuViewAboutButtonClicked(self) } 

现在,在你的viewController中,实现这个委托方法:

 func slideMenuViewAboutButtonClicked(menuView: SlideMenuView) { let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("About") as! AboutViewController self.presentViewController(nextViewController, animated: true, completion: nil) } 

此外,不要忘记将sliderMenuView对象作为委托分配给viewcontroller。 就像是:

 self.sliderMenuView.delegate = self // (self == the containing viewController 

我用另一种方式做了。 在类文件中

类SlideMenuView:UIView {

var navigationController:UINavigationController? //声明一个导航控制器variables

//创build一个采用导航控制器的方法

func prepareScreen(navController:UINavigationController) – > UIView {

  navigationController = navController let nibView = NSBundle.mainBundle().loadNibNamed("SlideMenuView", owner: self, options: nil)[0] as! UIView self.addSubview(nibView) return nibView } 

//在button操作中

@IBAction func btnAction(sender:UIButton){

  var storyBoard = UIStoryboard(name: "Main", bundle: nil) let nextViewController = storyBoard!.instantiateViewControllerWithIdentifier("NextViewController") as! UIViewController navigationController?.pushViewController(nextViewController, animated: true) } 

}

//用于从UIViewController调用

 slideBarMenuIstance.prepareScreen(self.navigationController!)