我的xib文件中有一个包含按钮的视图。我想按下按钮(@IBAction)
时移动到ViewController。我使用了下面的代码
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("About") as! AboutViewController
self.presentViewController(nextViewController, animated: true, completion: nil)
我收到错误“类型'的值'SlideMenuView'没有成员'presentViewController'。
因为我的类是UIView类型:
class SlideMenuView: UIView {
}
所以如何导航到其他视图控制器。
答案 0 :(得分:3)
这是因为您尝试提供的课程是UIView
,而不是UIViewController
。它没有现在的方法。
我猜你的视图(SlideMenuView)是嵌入在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
答案 1 :(得分:1)
我以不同的方式做到了。在课程文件
中类SlideMenuView:UIView {
var navigationController:UINavigationController? //声明导航控制器变量
//创建一个带导航控制器的方法
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!)