Programing

iPhone에서 UIViewController를 팝업으로 표시

crosscheck 2020. 10. 21. 07:43
반응형

iPhone에서 UIViewController를 팝업으로 표시


이 자주 반복되는 질문에 대한 완전하고 확실한 답이 없기 때문에 여기서 질문하고 대답하겠습니다.

종종 우리는 UIViewController아래 그림과 같이 전체 화면을 덮지 않는 것을 제시해야 합니다.

여기에 이미지 설명 입력

Apple은 , Twitter 또는 Facebook 공유보기 컨트롤러 UIViewController등과 같은 여러 가지 유사한을 제공합니다 UIAlertView.

커스텀 컨트롤러에 대해이 효과를 어떻게 얻을 수 있습니까?


참고 :이 솔루션은 iOS 8에서 중단되었습니다. 최대한 빨리 새 솔루션을 게시하겠습니다.

여기서는 스토리 보드를 사용하여 대답 할 것이지만 스토리 보드 없이도 가능합니다.

  1. Init :UIViewController 스토리 보드에 두 개 만듭니다 .

    • FirstViewController어느 것이 정상이고 SecondViewController어느 것이 팝업이 될지 말해 봅시다.

  2. 모달 SEGUE : 넣어 UIButtonFirstViewController과이에 SEGUE을 만들 UIButtonSecondViewController같은 모달 SEGUE.

  3. 투명하게 만들기 : 이제 UIView( UIView기본적으로로 생성됨 UIViewController)을 선택 SecondViewController하고 배경색을 명확한 색상으로 변경합니다.

  4. 배경 희미한합니다 추가 UIImageViewSecondViewController화면 전체를 커버하고 일부 흐리게 반 투명 이미지의 이미지를 설정한다. 여기에서 샘플을 얻을 수 있습니다 : UIAlertView배경 이미지

  5. 디스플레이 디자인 : 이제 UIView보여주고 싶은 디자인을 추가 하고 만듭니다. 다음은 내 스토리 보드의 스크린 샷입니다.스토리 보드

    • 여기에 SecondViewController사용자 이름과 암호를 묻는 팝업으로 열리는 로그인 버튼에 segue를 추가했습니다.
  6. 중요 : 이제 주요 단계입니다. SecondViewControllerFirstViewController를 완전히 숨기지 않기를 바랍니다 . 선명한 색상을 설정했지만 이것만으로는 충분하지 않습니다. 기본적으로 모델 표시 뒤에 검은 색을 추가하므로의 viewDidLoad에 한 줄의 코드를 추가해야합니다 FirstViewController. 다른 위치에서도 추가 할 수 있지만 segue보다 먼저 실행해야합니다.

    [self setModalPresentationStyle:UIModalPresentationCurrentContext];

  7. 닫기 : 닫기 시기는 사용 사례에 따라 다릅니다. 이것은 모달 프레젠테이션이므로 무시하기 위해 모달 프레젠테이션을 위해 수행하는 작업을 수행합니다.

    [self dismissViewControllerAnimated:YES completion:Nil];

그게 다야.....

모든 종류의 제안과 의견을 환영합니다.

데모 : 여기에서 데모 소스 프로젝트를 얻을 수 있습니다 : Popup Demo

NEW는 : 누군가가이 개념에 아주 좋은 일을했다 : MZFormSheetController
새로운 : 나는 기능의이 종류를 얻기 위해 한 번 더 코드를 발견 KLCPopup


iOS 8 업데이트 : iOS 7과 iOS 8 모두에서 작동하도록이 방법을 만들었습니다.

+ (void)setPresentationStyleForSelfController:(UIViewController *)selfController presentingController:(UIViewController *)presentingController
{
    if (iOSVersion >= 8.0)
    {
        presentingController.providesPresentationContextTransitionStyle = YES;
        presentingController.definesPresentationContext = YES;

        [presentingController setModalPresentationStyle:UIModalPresentationOverCurrentContext];
    }
    else
    {
        [selfController setModalPresentationStyle:UIModalPresentationCurrentContext];
        [selfController.navigationController setModalPresentationStyle:UIModalPresentationCurrentContext];
    }
}

다음과 같이 prepareForSegue deligate 내에서이 메소드를 사용할 수 있습니다.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    PopUpViewController *popup = segue.destinationViewController;
    [self setPresentationStyleForSelfController:self presentingController:popup]
}

Interface Builder (스토리 보드)의 모달 팝업

1 단계

모달 팝업으로 원하는 ViewController에서 루트 UIView의 배경색을 지우십시오. 루트 뷰에서 명확한 색상 설정팁 : 루트 UIView를 팝업으로 사용하지 마십시오. 더 작은 새 UIView를 팝업으로 추가하십시오.

2 단계

팝업이있는 ViewController에 대한 Segue를 만듭니다. "모달로 표시"를 선택합니다.Segue

여기에서 팝업을 만드는 두 가지 방법

방법 1-Segue 사용

Segue를 선택하고 프레젠테이션을 "Over Current Context"로 변경합니다. 현재 상황에 대해

방법 2-View Controller 사용

팝업 인 ViewController Scene을 선택합니다. Attributes Inspector의 View Controller 섹션에서 Presentation을 "Over Current Context"로 설정합니다.ViewController

두 방법 모두 작동합니다. 그렇게해야합니다!

완제품


Interface Builder에서이 작업을 수행 할 수 있습니다.

  • 표시하려는 뷰의 경우 가장 바깥 쪽 뷰 배경을 투명하게 설정합니다.
  • Control + 클릭하고 호스트 뷰 컨트롤러에서 모달 뷰 컨트롤러로 드래그
  • 모달로 현재 선택
  • 새로 만든 segue를 클릭하고 Attribute Inspector (오른쪽)에서 "Presentation"을 "Over Current Context"로 설정합니다.

내 양식 시트 컨트롤러 MZFormSheetController for iPhone을 자유롭게 사용하십시오 . 예제 프로젝트에는 전체 창을 다루지 않고 많은 프레젠테이션 / 전환 스타일을 포함하는 모달 뷰 컨트롤러를 표시하는 방법에 대한 많은 예제가 있습니다.

또한라고 MZFormSheetController의 최신 버전을 시도 할 수 있습니다 MZFormSheetPresentationController을 하고 더 많은 기능을 많이 가지고 있습니다.


EzPopup ( https://github.com/huynguyencong/EzPopup )을 사용할 수 있으며 Swift 포드이며 사용하기 매우 쉽습니다.

// init YourViewController
let contentVC = ...

// Init popup view controller with content is your content view controller
let popupVC = PopupViewController(contentController: contentVC, popupWidth: 100, popupHeight: 200)

// show it by call present(_ , animated:) method from a current UIViewController
present(popupVC, animated: true)

이렇게하면 뷰 컨트롤러에 다른 하위 뷰를 추가 할 수 있습니다. 먼저 하위보기로 추가하려는 ViewController의 상태 표시 줄을 없음으로 설정하여 원하는대로 크기를 조정할 수 있습니다. 그런 다음 Present View 컨트롤러에서 버튼을 만들고 버튼을 클릭하는 방법을 만듭니다. 방법에서 :

- (IBAction)btnLogin:(id)sender {
    SubView *sub = [[SubView alloc] initWithNibName:@"SubView" bundle:nil];
    sub.view.frame = CGRectMake(20, 100, sub.view.frame.size.width, sub.view.frame.size.height);
    [self.view addSubview:sub.view];
}

도움이 되었기를 바랍니다. 궁금한 점이 있으면 언제든지 문의하세요.


Imao는 배경에 UIImageView를 넣는 것이 최선의 생각이 아닙니다. 제 경우에는 컨트롤러 뷰에 다른 2 개의 뷰를 추가했습니다. 첫 번째 뷰는 [UIColor clearColor]배경에, 두 번째-투명하게하고 싶은 색상 (제 경우에는 회색) 순서가 중요합니다. 그런 다음 두 번째 뷰의 경우 알파 0.5 (alpha> = 0 <= 1)를 설정합니다.prepareForSegue

infoVC.providesPresentationContextTransitionStyle = YES;
infoVC.definesPresentationContext = YES;

그리고 그게 전부입니다.


스위프트 4 :

오버레이, 또는 당신은 또한 사용할 수있는 팝업보기를 추가하려면 컨테이너보기를 당신이 무료보기 컨트롤러를 얻을 수있는을 (당신은 보통 오브젝트 팔레트 / 라이브러리에서 컨테이너보기를 얻을)

여기에 이미지 설명 입력

단계 :

  1. 컨테이너보기의 내용이 표시 될 때 어둡게하기 위해이 컨테이너보기를 보유하는보기 (그림의 ViewForContainer)가 있습니다. 첫 번째 View Controller 내부에 콘센트 연결

  2. 첫 번째 VC가로드 될 때이보기 숨기기

  3. 버튼을 클릭하면 숨김 해제 여기에 이미지 설명 입력

  4. 컨테이너보기 콘텐츠가 표시 될 때이보기를 어둡게하려면보기 배경을 검은 색으로 설정하고 불투명도를 30 %로 설정합니다.

여기에 이미지 설명 입력

버튼을 클릭하면이 효과를 얻을 수 있습니다. 여기에 이미지 설명 입력

참고 URL : https://stackoverflow.com/questions/16230700/display-uiviewcontroller-as-popup-in-iphone

반응형