2014-09-04 4 views
0

Storyboards 및 AutoLayout을 사용하고 있습니다. 장면이 2 개 있습니다. 1은 툴바가있는 메인 뷰 컨트롤러이고 여러 UIBarButtonItem과 1은 UILabel을 단순히 표시해야하는 UIViewController입니다. 사용자가 내 주요 뷰 컨트롤러에서 도구 모음을 탭하면, 다음과 같은 코드로 팝 오버를 제시 :UIPopoverPresentationController Swift

func presentPopover(viewCtrl: UIViewController, item: UIBarButtonItem) { 
viewCtrl.modalPresentationStyle = .Popover 
let popover: UIPopoverPresentationController = viewCtrl.popoverPresentationController! 
popover.permittedArrowDirections = .Any 
popover.barButtonItem = item 
self.presentViewController(viewCtrl, animated: true, completion: nil) 
} 

helpView = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("HelpView“) as? HelpVC 
if helpView != nil { 
    presentPopover(helpView!, helpButton) 
} 

뷰 제시하지만 파단 (UILabel의)이 표시되지 않습니다 도착합니다. 동일한 이상한 동작이 발생합니다. 코드에서 팝업 오버레이 프레젠테이션 대신 스토리 보드 단절을 설정합니다. 그러나, 내 동일한 UINavigationController보기를 밀 때 모든 게 잘 표시됩니다. 내가 놓친 게 있니?

최고 감사합니다, 올리버

답변

1

당신이 원하는에 크기를 조정합니다. 당신이 되었 경우는 sourceView 대신 barbutton을 설정할 수 있습니다.

if let controller = viewCtrl { 
     controller.preferredContentSize = CGSizeMake(200,25) 
     controller.modalPresentationStyle = UIModalPresentationStyle.Popover 
     if let popover = controller.popoverPresentationController { 
      popover.delegate = self 
      popover.sourceView = viewCtrl.view 
      popover.sourceRect = CGRectMake(0,-5, 50, 50) 
      popover.permittedArrowDirections = .Any 
      self.presentViewController(controller, animated: true, completion: nil) 
     } 
    } 
1

최고의 자습서

  • click here 한 XIB 및 팝업 메뉴에 대한 신속한 파일을 만듭니다. (예 : MenuViewController)
  • 디스플레이 팝업 메뉴를위한 다른 xib 또는 스토리 보드보기 컨트롤러 파일을 만듭니다. (예 : ViewController)
  • viewController 파일에 추가 UIPopoverPresentationControllerDelegate
  • 버튼을 ViewController에 추가하고 IBAction을 작성하고 벨로우즈 코드를 작성하십시오. 최고의 튜토리얼 click here

    를 들어

@IBAction func onClickMenu(_ sender: UIButton) 
    { 
     if btnMenu.isSelected 
     { 
      btnMenu.setImage(UIImage(named: "arrow_orange"), for: UIControlState.normal) 

      btnMenu.isSelected = false 

      self.dismiss(animated: true, completion: nil) 
     } 
     else 
     { 
      btnMenu.setImage(UIImage(named: "up_arrow_orange"), for: UIControlState.normal) 

      btnMenu.isSelected = true 

      let popMenu = MenuViewController(nibName: "MenuViewController", bundle: nil) 
      popMenu.modalPresentationStyle = UIModalPresentationStyle.popover 

      popMenu.preferredContentSize = CGSize.init(width: 320, height: 265) 

      popMenu.vcPush = self 

      self.present(popMenu, animated: true, completion: nil) 

      let popController : UIPopoverPresentationController = popMenu.popoverPresentationController! 

      popController.permittedArrowDirections = UIPopoverArrowDirection.up 

      popController.delegate = self 

      //popController?.barButtonItem = nil 

      popController.sourceView = self.view 

      popController.sourceRect = CGRect.init(x: 525, y: 30, width: 10, height: 10) 
     } 
    }