2016-02-08 117 views
0

我有一个在我的xib文件中包含按钮的视图。我想要移动到ViewController,当我按下按钮(@IBAction)。我用下面的代码如何导航到一个ViewController从UIView类的xib文件

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 { 
} 

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

回答

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 
} 

//在按钮操作

@IBAction FUNC btnAction(发件人:的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!) 
3

这就是你正试图展示的类是UIView而不是UIViewController。它没有Present方法。

我猜你的看法(SlideMenuView)是嵌入在视图控制器。你需要做的是实现一个委托,并通知你的包含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对象的视图 - 控制作为代表。 这样的东西:

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

感谢您的帮助! @Lirik –

+1

@ S.Bharti,很高兴帮助。如果您点击复选标记,如果您的答案被接受,我会很高兴。 – Lirik

相关问题