programing

iPhone에서 UIView 컨트롤러를 팝업으로 표시

lastmoon 2023. 8. 25. 23:55
반응형

iPhone에서 UIView 컨트롤러를 팝업으로 표시

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

종종 우리는 발표할 필요가 있습니다.UIViewController아래 그림과 같이 전체 화면을 가리지 않도록 합니다.

enter image description here

은 유사한 유사한몇가제공다니합은를지▁several▁similar▁apple다▁apple니를 제공합니다.UIViewController를 들어, 를들어예와 같은UIAlertViewTwitter 또 Facebook 공트러등롤컨뷰는유▁twitter등러롤트또.

사용자 지정 컨트롤러에서 이러한 효과를 얻을 수 있는 방법은 무엇입니까?

참고: 이 솔루션은 iOS 8에서 고장이 났습니다. 최대한 빨리 새로운 솔루션을 게시하겠습니다.

여기서 스토리보드를 이용해서 답변을 드리려고 하는데 스토리보드 없이도 가능합니다.

  1. Init: 두 개 만들기UIViewController스토리보드로

    • 를 들어 를예FirstViewController이고 어느것정이고상이고▁which▁is정.SecondViewController팝업이 될 것입니다.

  2. 모달 세그: 퍼팅UIButton이 FirstViewController에 합니다.UIButtonSecondViewController모달 세구로

  3. 투명하게 만들기:이제 선택UIView(UIView으로 사용기생성로다니됩으로 작성됩니다.UIViewControllerSecondViewController배경색을 선명한 색으로 변경합니다.

  4. 배경을 어둡게 만들기: 추가UIImageViewSecondViewController전체 화면을 덮고 이미지를 흐리게 반투명 이미지로 설정합니다.샘플은 여기에서 얻을 수 있습니다: 배경 이미지

  5. 디스플레이 설계:이제 추가UIView당신이 보여주고 싶은 디자인을 만들어 보세요. 제 .storyboard

    • 로그인 시 segue를 시이 있습니다.SecondViewController 이름과 .
  6. 중요:이제 그 주요 단계입니다.우리는 그것을 원합니다.SecondViewControllerFirstView 컨트롤러를 완전히 숨기지는 않습니다.우리는 선명한 색상을 설정했지만 이것만으로는 충분하지 않습니다.기본적으로 모델 프레젠테이션 뒤에 검은색을 추가하므로 viewDidLoad/의 코드 한 줄을 추가해야 합니다.FirstViewController다른 곳에서도 추가할 수 있지만 segue 전에 실행해야 합니다.

    [self setModalPresentationStyle:UIModalPresentationCurrentContext];

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

    [self dismissViewControllerAnimated:YES completion:Nil];

그게 다야...

어떤 종류의 제안이나 의견도 환영합니다.

데모 : 데모 소스 프로젝트는 여기에서 얻을 수 있습니다 : 팝업 데모

새로운 소식: MZFormSheetController라는 개념에 대해 매우 잘 해냈습니다.
New : 이런 기능을 얻을 수 있는 코드를 하나 더 찾았습니다 : KLC 팝업


iOS 8 Update : 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 내부에서 이 메서드를 사용할 수 있습니다.

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

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

인터페이스 작성기의 모달 팝업(스토리보드)

1단계

모드 팝업으로 사용할 ViewController에서 루트 UIView의 배경색을 선명하게 표시합니다.Set Clear Color on root view 팁: 루트 UIView를 팝업으로 사용하지 마십시오.팝업에 더 작은 새 UIView를 추가합니다.

2단계

팝업이 있는 View 컨트롤러에 Segue를 만듭니다.형식적으로 표시를 선택합니다.

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

방법 1 - 세그 사용

Segue를 선택하고 프레젠테이션을 "Over Current Context"로 변경합니다.

방법 2 - 뷰 컨트롤러 사용

팝업에 해당하는 View Controller Scene(보기 컨트롤러 장면)을 선택합니다.특성 검사기의 View Controller 섹션에서 프레젠테이션을 "Over Current Context"로 설정합니다.

어떤 방법이든 효과가 있을 것입니다.그거면 충분해요!

Finished Product

인터페이스 작성기에서 이 작업을 수행할 수 있습니다.

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

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

또한 MZ FormSheet Presentation Controller라고 하는 최신 버전의 MZ FormSheet Controller를 사용해 볼 수 있으며 더 많은 기능이 있습니다.

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)

Imao는 UIImageView를 배경으로 하는 것은 좋은 생각이 아닙니다. 뷰에 했는데, First 에는 나경우개, 컨러롤뷰 2에의다 2니뷰추가 있습니다. 첫번째 뷰는[UIColor clearColor]배경에, 투명하고 싶은 두 번째 색상(내 경우 회색).순서는 중요합니다.그런 다음 두 번째 보기의 경우 알파 0.5(알파 > = 0 < = 1)를 설정합니다.의행추습다니했의 행에 했습니다.prepareForSegue

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

그리고 그게 다야.

스위프트 4:

오버레이 또는 팝업 뷰를 추가하려면 무료 뷰 컨트롤러(일반 객체 팔레트/라이브러리에서 컨테이너 뷰를 얻을 수 있음)를 사용할 수도 있습니다.

enter image description here

단계:

  1. Container View의 내용이 표시될 때 이 Container View를 어둡게 하려면 이 Container View를 포함하는 View(그림의 ViewForContainer)가 있어야 합니다.첫 번째 View 컨트롤러 내부의 콘센트 연결

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

  3. 단추를 클릭할 때 숨기기 취소

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

enter image description here

버튼을 클릭하면 이 효과가 나타납니다.

이렇게 하면 보기 컨트롤러에 다른 하위 보기를 추가할 수 있습니다.먼저 하위 뷰로 추가할 View 컨트롤러의 상태 표시줄을 없음으로 설정하여 원하는 대로 크기를 조정할 수 있습니다.그런 다음 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];
}

도움이 되길 바라며, 질문이 있으면 언제든지 물어보세요.

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

반응형