2017-09-22 7 views
0

Swiftの新機能。私は単純なUIを持っています:UIWebViewの上にUINavigationBarを置き、右のボタンのボタン項目にメニューを表示するアクションを持たせることで、Webビューに別のページを表示できるようにします。 ; viewnavのために私はMain.storyboardに新たなダミーのビューを追加したり、既存のナビゲーションを使用してみましたスウィフトメニューが右のナビゲーションボタンに表示されません。

class ViewController: UIViewController { 
    @IBOutlet weak var webView: UIWebView! 
    @IBOutlet weak var menu: UIBarMenuItem! 
    @IBOutlet weak var viewnav: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad(); 
     let url = URL(string:"about:blank") 
     let req = URLRequest(url:url!) 
     webView.loadRequest(req) 
    } 

    @obj func dummy(){ 
    } 

    @IBAction func MenuShow(sender: UIBarButtonItem){ 
     let menu = UIMenuController.shared 
     viewnav.becomeFirstResponder() 
     menu.setTargetRect(viewnav.frame, in:viewnav) 

     let dummy = UIMenuItem(title:"Dummy", action: #selector(dummy)) 

     menu.menuItems = [dummy] 
     menu.setMenuVisible(true, animated: true) 

     //for test only; should move to menu item actions 
     let url = URL(string:"https://www.apple.com") 
     let req = URLRequest(url:url!) 
     webView.loadRequest(req)  
    } 

} 

(私はUIオブジェクトにWeb表示、バーのボタンが接続されている:

は、ビューコントローラがどのように見える表示しますどちらも同じ結果です)

結果のアプリケーションは空のページを表示し、メニューボタンを押すとアップルのホームページにジャンプして、上記のコードが期待通りに実行されます。しかし、メニューが表示されなかったので、上記のコードで何が間違っていますか?

は(そこthisのようないくつかの他のまねの質問がありますが、彼らは問題を解決していないようでした)

答えて

0

このanswerソリューションを提供します:

override var canBecomeFirstResponder: Bool { 
    return true 
} 

そしてviewDidLoadに次の行を追加します方法

view.becomeFirstResponder() 

フルバージョン:

class ViewController: UIViewController { 
    @IBOutlet weak var webView: UIWebView! 
    @IBOutlet weak var menuButton: UIBarMenuItem! 

    override func viewDidLoad() { 
     super.viewDidLoad(); 
     let url = URL(string:"about:blank") 
     let req = URLRequest(url:url!) 
     webView.loadRequest(req) 

     view.becomeFirstResponder() 

     let menu = UIMenuController.shared 
     let dummy = UIMenuItem(title:"Dummy", action: #selector(dummy)) 
     menu.menuItems = [dummy] 
    } 

    override var canBecomeFirstResponder: Bool { 
     return true 
    } 

    @obj func dummy(){ 
     let url = URL(string:"https://www.apple.com") 
     let req = URLRequest(url:url!) 
     webView.loadRequest(req)  
     menu.setMenuVisible(true, animated: false) 
    } 

    @IBAction func MenuShow(sender: UIBarButtonItem){ 
     let menu = UIMenuController.shared 
     let bv = menuButton.value(forKey: "view") as? UIView 
     menu.setTargetRect(bv!.frame, in:view) 

     menu.setMenuVisible(true, animated: true) 
    } 
} 
関連する問題