iPhone에서 UIViewController를 팝업으로 표시
이 자주 반복되는 질문에 대한 완전하고 확실한 답이 없기 때문에 여기서 질문하고 대답하겠습니다.
종종 우리는 UIViewController아래 그림과 같이 전체 화면을 덮지 않는 것을 제시해야 합니다.

Apple은 , Twitter 또는 Facebook 공유보기 컨트롤러 UIViewController등과 같은 여러 가지 유사한을 제공합니다 UIAlertView.
커스텀 컨트롤러에 대해이 효과를 어떻게 얻을 수 있습니까?
참고 :이 솔루션은 iOS 8에서 중단되었습니다. 최대한 빨리 새 솔루션을 게시하겠습니다.
여기서는 스토리 보드를 사용하여 대답 할 것이지만 스토리 보드 없이도 가능합니다.
Init :
UIViewController스토리 보드에 두 개 를 만듭니다 .FirstViewController어느 것이 정상이고SecondViewController어느 것이 팝업이 될지 말해 봅시다.
모달 SEGUE : 넣어
UIButtonFirstViewController과이에 SEGUE을 만들UIButton에SecondViewController같은 모달 SEGUE.투명하게 만들기 : 이제
UIView(UIView기본적으로로 생성됨UIViewController)을 선택SecondViewController하고 배경색을 명확한 색상으로 변경합니다.배경 희미한합니다 추가
UIImageView로SecondViewController화면 전체를 커버하고 일부 흐리게 반 투명 이미지의 이미지를 설정한다. 여기에서 샘플을 얻을 수 있습니다 :UIAlertView배경 이미지디스플레이 디자인 : 이제
UIView보여주고 싶은 디자인을 추가 하고 만듭니다. 다음은 내 스토리 보드의 스크린 샷입니다.
- 여기에
SecondViewController사용자 이름과 암호를 묻는 팝업으로 열리는 로그인 버튼에 segue를 추가했습니다.
- 여기에
중요 : 이제 주요 단계입니다.
SecondViewControllerFirstViewController를 완전히 숨기지 않기를 바랍니다 . 선명한 색상을 설정했지만 이것만으로는 충분하지 않습니다. 기본적으로 모델 표시 뒤에 검은 색을 추가하므로의 viewDidLoad에 한 줄의 코드를 추가해야합니다FirstViewController. 다른 위치에서도 추가 할 수 있지만 segue보다 먼저 실행해야합니다.[self setModalPresentationStyle:UIModalPresentationCurrentContext];닫기 : 닫기 시기는 사용 사례에 따라 다릅니다. 이것은 모달 프레젠테이션이므로 무시하기 위해 모달 프레젠테이션을 위해 수행하는 작업을 수행합니다.
[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를 만듭니다. "모달로 표시"를 선택합니다.
여기에서 팝업을 만드는 두 가지 방법
방법 1-Segue 사용
Segue를 선택하고 프레젠테이션을 "Over Current Context"로 변경합니다. 
방법 2-View Controller 사용
팝업 인 ViewController Scene을 선택합니다. Attributes Inspector의 View Controller 섹션에서 Presentation을 "Over Current Context"로 설정합니다.
두 방법 모두 작동합니다. 그렇게해야합니다!
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 :
오버레이, 또는 당신은 또한 사용할 수있는 팝업보기를 추가하려면 컨테이너보기를 당신이 무료보기 컨트롤러를 얻을 수있는을 (당신은 보통 오브젝트 팔레트 / 라이브러리에서 컨테이너보기를 얻을)
단계 :
컨테이너보기의 내용이 표시 될 때 어둡게하기 위해이 컨테이너보기를 보유하는보기 (그림의 ViewForContainer)가 있습니다. 첫 번째 View Controller 내부에 콘센트 연결
첫 번째 VC가로드 될 때이보기 숨기기
컨테이너보기 콘텐츠가 표시 될 때이보기를 어둡게하려면보기 배경을 검은 색으로 설정하고 불투명도를 30 %로 설정합니다.
참고 URL : https://stackoverflow.com/questions/16230700/display-uiviewcontroller-as-popup-in-iphone
'Programing' 카테고리의 다른 글
| RoR-MD5 세대 (0) | 2020.10.21 |
|---|---|
| 감소 단계 후 출력 파일 병합 (0) | 2020.10.21 |
| JQ : 여러 조건 선택 (0) | 2020.10.21 |
| Firefox 4 : 필수 양식 입력에서 빨간색 테두리를 제거하는 방법이 있습니까? (0) | 2020.10.21 |
| 정방향 클래스 개체에서 속성을 찾을 수 없습니다. (0) | 2020.10.21 |




