0

所以我試圖創建一個應用程序,但我試圖避免使用故事板。因此,只需使用Swift文件和XIB文件。以編程方式創建導航視圖

我曾經在導航控制器上工作過一段時間,但還不夠我猜。到目前爲止,我有這樣的:

在AppDelegate中我有:

let homeVC = HomeViewController() 
let rootVC = UINavigationController(rootViewController: homeVC) 

window!.rootViewController = rootVC 
window!.makeKeyAndVisible() 

我認爲目前完全是空的,但自帶的創建一個新的XIB文件基本的「視圖」屏幕。我已將其大小設置爲freeform,其他所有內容如頂欄,狀態欄均爲Inferred

在我HomeViewController.swift我:

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
    let nib = UINib(nibName: "HomeView", bundle: nil) 
    let objects = nib.instantiateWithOwner(self, options: nil) 
    self.view = objects[0] as! UIView; 

    print(self.navigationController) 

    // customize navigation bar 
    let settingsImage = UIImage(named: "settingsWheelBlack.png") 
    let settingsNavItem = UIBarButtonItem(image: settingsImage, style: UIBarButtonItemStyle.Plain, target: nil, action: Selector("selector")) 
    let addStuffItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: nil, action: Selector("selector")) 

    self.navigationController?.navigationItem.title = "Home" 
    self.navigationController?.navigationItem.leftBarButtonItem = settingsNavItem 
    self.navigationController?.navigationItem.rightBarButtonItem = addStuffItem 

    print(self.navigationController?.navigationBar) 
    print(self.navigationController?.navigationItem.title) 
} 

但是當我運行應用程序的導航欄不顯示。以下是我目前所嘗試的內容:

  1. 將導航欄控件添加到我的XIB並將IB插座連接到它。還要將IB插座連接到導航欄控件中已存在的導航項目。然後設置標題,左鍵和右鍵。沒有工作

    1. 在上面定義的rootVC中,直接在AppDelegate中設置標題和按鈕。沒有工作。

任何想法我失蹤了?

回答

0

我在收集一些力量讀取大量蘋果文檔後解決了這個問題。在這個頁面上,我發現了這一小段文字:

In a navigation interface, each content view controller in the navigation stack provides a navigation item as the value of its **navigationItem** property. The navigation stack and the navigation item stack are always parallel: for each content view controller on the navigation stack, its navigation item is in the same position in the navigation item stack

所以我離開了我的AppDelegate代碼是和改變了我viewDidLoad功能:

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
    let nib = UINib(nibName: "EventsHomeView", bundle: nil) 
    let objects = nib.instantiateWithOwner(self, options: nil) 
    self.view = objects[0] as! UIView; 

    print(self.navigationController) 

    // customize navigation bar 
    let settingsImage = UIImage(named: "settingsWheelBlack.png") 
    let settingsNavItem = UIBarButtonItem(image: settingsImage, style: UIBarButtonItemStyle.Plain, target: nil, action: Selector("selector")) 
    let addStuffItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: nil, action: Selector("selector")) 

    // Each VC within a navigation controller has it's own navigationItem property that the underlying navigation controller uses to show in the navigationBar 
    self.navigationItem.title = "Home" 
    self.navigationItem.leftBarButtonItem = settingsNavItem 
    self.navigationItem.rightBarButtonItem = addStuffItem 
} 

和中提琴!