2016-02-08 114 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

相關問題