2014-11-17 6 views
1

Я следую THIS, но я не загрузил стартовый файл проекта из этого учебника, потому что хочу сделать это по-другому, но я застрял здесь с часом, потому что я получил эту ошибку:'UIStoryboard.type' не имеет имени с именем 'centerViewController'

'UIStoryboard.type' does not have member named 'centerViewController' 

Здесь я пытаюсь добавить подвид (CenterViewController) в ContainerViewController.

Вот мой код ContainerViewController.swift

import UIKit 
import QuartzCore 

class ContainerViewController: UIViewController, CenterViewControllerDelegate { 

var centerNavigationController: UINavigationController! 
var centerViewController: CenterViewController! 


override init() { 
    super.init(nibName: nil, bundle: nil) 
} 

required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 

    centerViewController = UIStoryboard.centerViewController()  
    //'UIStoryboard.type' does not have member named 'centerViewController' 
    centerViewController.delegate = self 


    // wrap the centerViewController in a navigation controller, so we can push views to it 
    // and display bar button items in the navigation bar 
    centerNavigationController = UINavigationController(rootViewController: centerViewController) 
    view.addSubview(centerNavigationController.view) 
    addChildViewController(centerNavigationController) 

    centerNavigationController.didMoveToParentViewController(self) 

    } 

} 

Это мой CenterViewController.swift

import UIKit 

@objc 
protocol CenterViewControllerDelegate { 
optional func toggleLeftPanel() 
optional func collapseSidePanels() 
} 

class CenterViewController: UIViewController { 

var delegate: CenterViewControllerDelegate? 

@IBAction func tableTapped(sender: AnyObject) { 

    } 
} 

И это мой AppDelegate.swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    window = UIWindow(frame: UIScreen.mainScreen().bounds) 

    let containerViewController = ContainerViewController() 

    window!.rootViewController = containerViewController 
    window!.makeKeyAndVisible() 
    return true 
} 

Может ли кто-нибудь дать мне какую-нибудь идею, что мне не хватает?

ответ

2

Вам не хватает расширения, предоставленного автором учебника, что делает метод UIStoryboard.centerViewController(). Код находится в нижней части ContainerViewController.swift в его загружаемый проект стартера, и я скопировал его вниз, а также:

private extension UIStoryboard { 
    class func mainStoryboard() -> UIStoryboard { return UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) } 

    class func leftViewController() -> SidePanelViewController? { 
    return mainStoryboard().instantiateViewControllerWithIdentifier("LeftViewController") as? SidePanelViewController 
    } 

    class func rightViewController() -> SidePanelViewController? { 
    return mainStoryboard().instantiateViewControllerWithIdentifier("RightViewController") as? SidePanelViewController 
    } 

    class func centerViewController() -> CenterViewController? { 
    return mainStoryboard().instantiateViewControllerWithIdentifier("CenterViewController") as? CenterViewController 
    } 
} 

Добавьте это к нижней части ContainerViewController.swift и он должен работать. (То есть, пока у вас есть эти контроллеры представлений, настроенные в правильных файлах раскадровки с правильными идентификаторами.)

+0

Спасибо. Его работа. Спасибо за помощь. –

+0

Не работает при вызове класса View Controller. Ошибка -> «Метод должен быть объявлен внутренним, потому что его результат использует внутренний тип». Есть идеи ? – Megamind

+0

@Megamind Вам, вероятно, лучше всего будет предлагать совершенно новый вопрос, включая ваш код. Без дополнительного контекста будет трудно решить, в чем проблема. –

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