2017-09-22 3 views
0

Swift에 새로 워니다. 간단한 UI가 있습니다 : UIWebView 상단에 UINavigationBar을 넣고 오른쪽 막대 버튼 항목에는 웹보기에 다른 페이지를 표시 할 수 있도록 메뉴를 보여주는 작업이 있습니다. viewnav 대한 I는 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)  
    } 

} 

(I 웹 뷰의 UI 객체 바 버튼 연결된 :

처럼 뷰 컨트롤러 보이는 보이기 동일한 결과가 표시됩니다.

결과 애플 리케이션은 빈 페이지를 표시하고 메뉴 버튼을 누르면 애플의 홈 페이지로 이동하므로 위의 코드가 예상대로 실행됩니다. 그러나 메뉴가 나타나지 않았으므로 위의 코드에서 무엇이 잘못 되었습니까?

이 ( 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) 
    } 
}