2016-07-02 3 views
1

Я создаю приложение без использования Interface Builder, поэтому я создаю все по коду.Элементы кнопки бара UIToolBar НЕ показаны с Swift

У меня есть контроллер вида, встроенный в контроллер навигации. Я знаю, что у навигационных контроллеров есть свойство панели инструментов, и все, что мне нужно сделать, это установить для boolean значение false, чтобы отобразить его. Мой код выглядит следующим образом (это функция, которая вызывается в viewDidLoad):

func setUpToolBar(){ 
    navigationController?.toolbarHidden = false 
    navigationController?.toolbar.barTintColor = UIColor.blackColor() 
    navigationController?.toolbar.tintColor = UIColor.whiteColor() 

    toolItems.append(addImageButton) 
    toolItems.append(UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: self, action: nil)) 
    toolItems.append(exportImageButton) 
    toolItems.append(UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: self, action: nil)) 
    toolItems.append(deleteImageButton) 

    navigationController?.toolbar.setItems(toolItems, animated: false) 

} 

Вот где и как я заявляю эти свойства для моего контроллера представления:

private var addImageButton : UIBarButtonItem = { 
    let button = UIFactory.createBarButtonItem(nil, imageNamed: "plus button", style: .Plain, target: ImagesCollectionViewController.self, selector: #selector(ImagesCollectionViewController.addImage)) 
    return button 
}() 
private var exportImageButton : UIBarButtonItem = { 
    let button = UIFactory.createBarButtonItem(nil, imageNamed: "export button", style: .Plain, target: ImagesCollectionViewController.self, selector: #selector(ImagesCollectionViewController.exportImagePressed)) 
    return button 
}() 
private var deleteImageButton : UIBarButtonItem = { 
    let button = UIFactory.createBarButtonItem(nil, imageNamed: "trash button", style: .Plain, target: ImagesCollectionViewController.self, selector: #selector(ImagesCollectionViewController.deleteImagePressed)) 
    return button 
}() 

private var toolItems : [UIBarButtonItem] = [] 

Вот функция для моего UIFactory класса, который просто обрабатывает хлопоты создания этих UI элементов вне контроллера зрения

class func createBarButtonItem(title: String?, imageNamed : String?, style : UIBarButtonItemStyle?, target : AnyObject?, selector : Selector?) -> UIBarButtonItem{ 
    let button = UIBarButtonItem() 
    if let theTitle = title { 
     button.title = theTitle 
    } 
    if let theImageName = imageNamed { 
     button.image = UIImage(named: theImageName) 
    } 
    if let theStyle = style{ 
     button.style = theStyle 
    } 
    if let theTarget = target { 
     button.target = theTarget 
    } 
    if let theSelector = selector { 
     button.action = theSelector 
    } 
    return button 
} 

И, после выполнения этого кода в симуляторе, это то, что я не вижу (без элементов панели! Кроме того, обратите внимание, у меня есть элемент кнопки бара в этой панели навигации, которые я добавил в коде просто отлично)

screenshot

Пожалуйста, кто-то помочь мне. Я застрял на таком бессмысленном шаге, и я не могу продолжить свое приложение без этого.

+0

Где вы звоните setupToolbar? – SArnab

+0

Вызывается в ViewDidLoad – iOShepherd

+1

Это может быть слишком рано. Если 'navigationController?' По-прежнему равен нулю, ваш код не будет иметь никакого эффекта. Это ноль? Если это так, попробуйте перевести вызов на 'setupToolbar' на' viewWillAppear' или где-нибудь подобное. –

ответ

4

Просто удалите

navigationController?.toolbar.setItems(toolItems, animated: false) 

И поставить эту строку кода

self.toolbarItems = [toolItems] 
1

Я изменил

navigationController .toolbar.setItems (toolItems, анимированные: правда)!

к

toolbarItems = toolItems

и работал для меня.

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