2016-02-08 3 views
0

У меня есть вид в моем файле xib, который содержит кнопки. Я хочу перейти на ViewController, когда я нажму кнопку (@IBAction). Я использовал ниже кодКак перейти к ViewController Из файла xib класса UIView

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 {

вар 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. Он не имеет настоящего метода.

Я предполагаю, что ваш взгляд (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 объект в ViewController в качестве делегата. что-то вроде:

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

Спасибо за помощь! @Lirik –

+1

@ S.Bharti, рад помочь. Я буду рад, если вы нажмете на галочку, если этот ответ будет принят вами. – Lirik

Смежные вопросы