2016-07-02 12 views
1

Ich mache eine App, ohne den Interface Builder zu verwenden, also erstelle ich alles nach Code.UIToolBar-Leiste Schaltflächenelemente werden nicht mit Swift angezeigt

Ich habe einen View-Controller, der in einem Navigationscontroller eingebettet ist. Ich weiß, dass Navigationssteuerungen eine Symbolleisteneigenschaft haben, und alles, was ich tun muss, ist, den Booleschen Wert auf "Falsch" zu setzen, um ihn anzuzeigen. Mein Code sieht wie folgt aus (es eine Funktion in viewDidLoad genannt ist):

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) 

} 

Hier ist, wo und wie ich diese Eigenschaften für meine View-Controller bin erklärt:

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] = [] 

Hier ist die Funktion für meine UIFactory Klasse, die einfach den Aufwand behandelt, diese UI Elemente außerhalb des view-Controllers zu schaffen

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 
} 

Und nach diesem Code im Simulator ausgeführt wird, das ist, was ich sehe (keine Elemente der Symbolleiste! Außerdem bemerke ich ein Bar-Taste Element in dieser Navigationsleiste, die ich in Code hinzugefügt just fine)

screenshot

Bitte, jemand mir helfen. Ich stecke auf einem so unsinnigen Schritt fest und kann ohne meine App nicht weitermachen.

+0

Wo rufst du setupToolbar an? – SArnab

+0

Aufruf in ViewDidLoad – iOShepherd

+1

Das ist vielleicht zu früh. Wenn 'navigationController?' Immer noch null ist, hat Ihr Code keine Auswirkungen. Ist es Null? Wenn ja, versuchen Sie den Aufruf von 'setupToolbar' nach' viewWillAppear' oder an einen ähnlichen Ort zu verschieben. –

Antwort

4

Entfernen Sie einfach

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

Und setzen diese Codezeile

self.toolbarItems = [toolItems] 
1

Ich änderte

Navigation .toolbar.setItems (toolItems, animiert: true)!

zu

toolbarItems = toolItems

und arbeitete für mich.