2017-04-12 5 views
0

Kann mir jemand helfen zu verstehen, was in meinem Code falsch ist. Ich bekomme es nicht mein Code kompiliert gut ohne Fehler, aber mein Bild wird nicht angezeigt. Ich bin sicher, mein Bild ist in Assests Ordner vorhanden und ich gebe den richtigen Namen meiner Bilder. Ich mache es programmatisch. Unten ist mein Code-:rightBarButtonItem Bild nicht angezeigt

* AppDelegate-:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     // Override point for customization after application launch. 
     windowLayout() 
     application.statusBarStyle = .lightContent 
     return true 
    } 

    func windowLayout() 
    { 
     window = UIWindow(frame: UIScreen.main.bounds) 
     window?.makeKeyAndVisible() 

     let layout = UICollectionViewFlowLayout() 
     window?.rootViewController = UINavigationController(rootViewController: HomeController(collectionViewLayout: layout)) 
     UINavigationBar.appearance().barTintColor = UIColor(colorLiteralRed: 238/255, green: 32/255, blue: 31/255, alpha: 1) 
     let statusBarView = UIView() 
     statusBarView.backgroundColor = UIColor(colorLiteralRed: 194/255, green: 31/255, blue: 31/255, alpha: 1) 
     window?.addSubview(statusBarView) 
     window?.translatesAutoresizingMaskIntoConstraints = false 
     //window?.addConstraintsWithFormat(format: "H:|[v0]|", views: statusBarView) 
     //window?.addConstraintsWithFormat(format: "V:|[v0(20)]", views: statusBarView) 
     UINavigationBar.appearance().shadowImage = UIImage() 
     //UINavigationBar.appearance().setBackgroundImage(UIImage(),forBarMatrics: .default) 
    } 

Erweiterung File-:

import UIKit 


protocol navigationBarItems { 
    func searchBarButton() 
    func handleMoreButton() 
} 


extension UINavigationController:navigationBarItems 
{ 
    func handleMoreButton() { 

    } 

    func searchBarButton() 
    { 
     let searchBarImage = UIImage(named: "search-icon")?.withRenderingMode(UIImageRenderingMode.alwaysTemplate) 
     let searchImage = UIBarButtonItem(image: searchBarImage, style: UIBarButtonItemStyle.done, target: self, action: #selector(handleSearch)) 
     navigationItem.rightBarButtonItem = searchImage 

    } 

    func handleSearch() 
    { 
     print("123") 
    } 

} 

Controller-Klassen-:

class HomeController: UICollectionViewController,UICollectionViewDelegateFlowLayout { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     setUpLayout() 
     setUpMenuBar() 
     fetchJsonData() 
     navigationController?.searchBarButton() 
    } 

Ich habe getestet, indem ich einen Haltepunkt aufgestellt habe, um zu überprüfen, ob meine Funktion angerufen wird oder nicht. Und es funktioniert gut, aber das Bild erscheint nicht, bitte helfen Sie.

Antwort

1

Versuchen Erweiterung von UIViewController zu machen statt UINavigationController

extension UIViewController:navigationBarItems 
{ 
    func handleMoreButton() { 

    } 

    func searchBarButton() 
    { 
     let searchBarImage = UIImage(named: "search-icon")?.withRenderingMode(UIImageRenderingMode.alwaysTemplate) 
     let searchImage = UIBarButtonItem(image: searchBarImage, style: UIBarButtonItemStyle.done, target: self, action: #selector(handleSearch)) 
     navigationItem.rightBarButtonItem = searchImage 

    } 

    func handleSearch() 
    { 
     print("123") 
    } 

} 

nun diese Methode aufrufen, von `viewDidLoad``

class HomeController: UICollectionViewController,UICollectionViewDelegateFlowLayout { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     setUpLayout() 
     setUpMenuBar() 
     fetchJsonData() 
     self.searchBarButton() 
    } 
+0

@Nirva D Danke es hat funktioniert. Aber warum Erweiterung UINavigationController funktionierte nicht? –

+1

Perfekter Dank. :) –

Verwandte Themen