如何从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!)