2014-12-01 7 views
3

사용자 지정 UIView 캔버스에서 일부 그림을 만들고 사용자가 도형을 선택할 수 있도록보기 맨 아래에 단추 집합을 사용하는 대신 사용자가 길게 누르는 제스처를하도록 한 다음 팝업 유형 메뉴를 선택할 수있는 다른 모양으로 나타냅니다. xCode에서 이와 같은 것을 볼 수는 없지만, iOS에 그런 것이 있다고 가정하고 있습니다. 배터리 및 알림이 부족할 때 표시되는 알림 팝업을 원하지 않습니다.스위프트 : iOS에서 팝업 메뉴를 만드는 방법

저는 UIPopoverController를 사용하여 살펴 보았습니다.하지만 저는 그것에 대해 읽은 다른 Stack Overflow 관련 질문과 Apple이 제공 한 설명서에 대해 약간 혼란 스럽습니다.

+0

GitHub에서 프로젝트를 살펴보아야합니다. https://github.com/liyong03/YLLongTapShare 달성하고자하는 목표를 달성 한 것으로 보입니다. 디자인이 마음에 들지 않는다면 코드를 공부하여 직접 작성할 수 있습니다. –

답변

0

viewController와 해당 버튼을 연결하고 segue로 popover 한 후에는 준비해야합니다. 다음은 popover segue를 준비하기위한 코드입니다.

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
{ 
    if let identifier = segue.identifier 
    { 
     switch identifier 
     { 
      case History.SegueIdentifier: 

      if let tvc = segue.destinationViewController as? TextViewController 
      { 
       if let ppc = tvc.popoverPresentationController 
       { 
        ppc.delegate = self 
       } 
       tvc.text = "\(diagnosticHistory)" 
      } 

      default: break 
     } 
    } 
} 

은 아이폰이 있다면 당신이이를 사용하는의 어떤 특정 요소를 취하는 텍스트를 생각한 것을 해결할 수 있도록 팝 오버는, 전체 화면으로 이동하게됩니다 마십시오.

이렇게하면 popover가 텍스트에있는 요소의 크기와 정확하게 일치하게됩니다.

@IBOutlet weak var textView: UITextView! 
{ 
    didSet 
    { 
     textView.text = text 
    } 
} 

var text : String = "" 
{ 
    didSet 
    { 
     textView?.text = text 
    } 
} 

override var preferredContentSize : CGSize 
{ 
    get 
    { 
     if textView != nil && presentingViewController != nil 
     { 
      return textView.sizeThatFits(presentingViewController!.view.bounds.size) 
     } 
     else 
     { 
      return super.preferredContentSize 
     } 
    } 

    set {super.preferredContentSize = newValue} 

    } 
} 

나는 다른 컨트롤러에서 2 개가 있지만 작동한다고 생각합니다. 또한 첫 번째의 ViewController에 UIPopoverPresentationControllerDelegate

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { 
    return UIModalPresentationStyle.None 
} 

를 구현해야합니다.