iOS에서 팝업 대화 상자를 구현하는 방법


303

계산 후 사용자에게 메시지를 전달하는 팝업 또는 경고 상자를 표시하고 싶습니다. 누구든지 내가 이것에 대한 자세한 정보를 어디서 찾을 수 있는지 알고 있습니까?

답변:


517

네, UIAlertView아마도 당신이 찾고있는 것입니다. 예를 들면 다음과 같습니다.

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No network connection" 
                                                message:@"You must be connected to the internet to use this app." 
                                               delegate:nil 
                                      cancelButtonTitle:@"OK"
                                      otherButtonTitles:nil];
[alert show];
[alert release];

보다 멋진 작업을 원한다면의 사용자 정의 UI 표시 와 같이 메소드 에서 UIAlertView서브 클래스 UIAlertView를 작성하고 사용자 정의 UI 구성 요소를 넣을 수 있습니다 init. 이 UIAlertView나타난 후 버튼을 누르면 응답 하려면 delegate위를 설정 하고 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex방법을 구현할 수 있습니다 .

을보고 싶을 수도 있습니다 UIActionSheet.


45
애플 문서에 따르면 "UIAlertView 클래스는있는 그대로 사용하기위한 것이며 서브 클래 싱을 지원하지 않습니다." developer.apple.com/library/ios/#documentation/uikit/reference/…
JOM

40
단지 주석 : ARC가 활성화되면 '[경고 릴리스]'가 필요하지 않습니다 (적어도 컴파일러는 그렇게 말합니다).
Javier Sedano

4
서브 클래스 UIAlertView는 이후 아이폰 OS 4를 지원하지 않습니다
xySVerma

1
여기에 당신은 또한 버튼 동작해야하는 경우, 위임 간단한 UIAlertView의 예입니다
guilherme.minglini

2
당신이 빠른 버전을 찾고있는 경우, 체크 아웃 오스카 Swanros ' 대답
로게 리오 차베스

177

이 질문에 나오는 사람들은 팝업 상자에 따라 다른 것을 의미합니다. Temporary Views 설명서를 읽는 것이 좋습니다 . 내 대답은 주로 이것과 다른 관련 문서에 대한 요약입니다.

경고 (예제보기)

여기에 이미지 설명을 입력하십시오

경고 는 제목과 선택적 메시지를 표시합니다. 사용자는 계속 진행하기 전에이를 확인 (단일 버튼 경고)하거나 간단한 선택 (단일 버튼 경고)을해야합니다. 로 경고를 생성합니다 UIAlertController.

불필요한 경고 생성에 대한 설명서의 경고 및 조언을 인용 할 가치가 있습니다.

여기에 이미지 설명을 입력하십시오

노트:

액션 시트 (예제보기)

여기에 이미지 설명을 입력하십시오

작업 시트 는 사용자에게 선택 목록을 제공합니다. 장치의 크기와 방향에 따라 화면 하단이나 팝 오버에 나타납니다. 경고와 마찬가지로 a UIAlertController는 작업 시트를 만드는 데 사용됩니다. iOS 8 이전 UIActionSheet에는 사용되었지만 이제 설명서에 다음과 같이 나와 있습니다.

중요 : UIActionSheet 아이폰 OS 8. (주에서 더 이상 사용되지 않습니다 UIActionSheetDelegate생성 및 iOS 8 액션 시트를 관리하고 나중에 대신 사용합니다. 또한 사용되지 않습니다) UIAlertController로모그래퍼 preferredStyleUIAlertControllerStyleActionSheet.

모달보기 (예를 보여주세요)

여기에 이미지 설명을 입력하십시오

모달 뷰는 이 작업을 완료하는 데 필요한 모든 것을 갖추고 자체에 포함 된보기입니다. 전체 화면을 차지하거나 차지하지 않을 수 있습니다. 모달 뷰를 만들려면 모달 프레젠테이션 스타일UIPresentationController 중 하나와 함께를 사용하십시오 .

또한보십시오

팝 오버 (예를 보여주세요)

여기에 이미지 설명을 입력하십시오

팝 오버는 그것을 떨어져 도청 할 때 뭔가에있는 경우 사용자가 탭을 나타나고 사라 도면이다. 탭을 한 위치에서 제어 또는 위치를 표시하는 화살표가 있습니다. 내용은 View Controller에 넣을 수있는 모든 것이 될 수 있습니다. 으로 팝 오버를합니다 UIPopoverPresentationController. (iOS 8 이전 UIPopoverController에는 권장되는 방법이었습니다.)

과거에는 팝 오버가 iPad에서만 가능했지만 iOS 8부터는 iPhone에서도 볼 수 있습니다 ( 여기 , 여기여기 참조 ).

또한보십시오

알림

여기에 이미지 설명을 입력하십시오

알림 은 앱이 포 그라운드에서 실행되지 않는 경우에도 사용자에게 무언가를 알리는 소리 / 진동, 알림 / 배너 또는 배지입니다.

여기에 이미지 설명을 입력하십시오

또한보십시오

안드로이드 토스트에 대한 메모

여기에 이미지 설명을 입력하십시오

Android에서 Toast 는 화면에 짧은 시간 동안 표시되고 앱과의 사용자 상호 작용을 방해하지 않으면 서 자동으로 사라지는 짧은 메시지입니다.

안드로이드 배경에서 온 사람들은 토스트의 iOS 버전이 무엇인지 알고 싶어합니다. 이 질문들에 대한 몇 가지 예는 여기 , 여기 , 여기 , 여기 에서 찾을 수 있습니다 . 대답은 iOS의 토스트에 해당하지 않는다는 것입니다 . 제시된 다양한 해결 방법은 다음과 같습니다.

  • 서브 클래스로 자신을 만드십시오 UIView
  • 토스트를 모방 한 타사 프로젝트 가져 오기
  • 타이머가있는 버튼없는 경고 사용

그러나 내 조언은 이미 iOS와 함께 제공되는 표준 UI 옵션을 고수하는 것입니다. 앱을 Android 버전과 똑같이 보이고 작동하도록 만들지 마십시오. iOS 앱처럼 보이고 느껴지도록 재 포장하는 방법을 생각해보십시오.


3
여전히 안드로이드 토스트에 대한 메모와 함께! 좋은! 이 정보는 Android 개발에서 온 새로운 개발자에게 도움이됩니다. 감사합니다!
Filipe Brito

3
이봐, 난 이걸 인쇄해서 틀어 야 해! 당신은 나를 어제 그리고 오늘 다시 저를 구했습니다 : D
finngu

58

iOS 8이 출시 된 이후 UIAlertView더 이상 사용되지 않습니다. UIAlertController 가 교체입니다.

다음은 Swift에서 어떻게 보이는지에 대한 샘플입니다.

let alert = UIAlertController(title: "Hello!", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
let alertAction = UIAlertAction(title: "OK!", style: UIAlertActionStyle.default)
{
    (UIAlertAction) -> Void in
}
alert.addAction(alertAction)
present(alert, animated: true)
{
    () -> Void in
}

보시다시피 API를 사용하면 작업과 경고를 표시 할 때 콜백을 구현할 수 있습니다.

스위프트 4.2 업데이트

let alert = UIAlertController(title: "Hello!", message: "Message", preferredStyle: UIAlertController.Style.alert)
let alertAction = UIAlertAction(title: "OK!", style: UIAlertAction.Style.default)
        {
            (UIAlertAction) -> Void in
        }
        alert.addAction(alertAction)
        present(alert, animated: true)
        {
            () -> Void in
        }

@Entalpi presentViewController에는 닫는 괄호가 있어야하며 완료 블록과 완료 : nil의 차이점은 무엇입니까?
Andrew Plummer

차이가 없습니다. 호출 할 블록이 있습니다.
Entalpi

25

iOS 8.0 용으로 업데이트

iOS 8.0부터는 다음과 같이 UIAlertController를 사용해야합니다.

-(void)alertMessage:(NSString*)message
{
    UIAlertController* alert = [UIAlertController
          alertControllerWithTitle:@"Alert"
          message:message
          preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction* defaultAction = [UIAlertAction 
          actionWithTitle:@"OK" style:UIAlertActionStyleDefault
         handler:^(UIAlertAction * action) {}];

    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
}

내 예제에서 self는 UIViewController이며 팝업에 대한 "presentViewController"메소드를 구현합니다.

데이비드


11

스위프트 3 및 스위프트 4 :

UIAlertView는 더 이상 사용되지 않으므로 Swift 3에 Alert를 표시하는 좋은 방법이 있습니다

let alertController = UIAlertController(title: NSLocalizedString("No network connection",comment:""), message: NSLocalizedString("connected to the internet to use this app.",comment:""), preferredStyle: .alert)
let defaultAction = UIAlertAction(title:     NSLocalizedString("Ok", comment: ""), style: .default, handler: { (pAlert) in
                //Do whatever you want here
        })
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)

더 이상 사용되지 않음 :

이것은 확인 된 응답에서 영감을 얻은 빠른 버전입니다.

AlertView 표시 :

   let alert = UIAlertView(title: "No network connection", 
                           message: "You must be connected to the internet to use this app.", delegate: nil, cancelButtonTitle: "Ok")
    alert.delegate = self
    alert.show()

뷰 컨트롤러에 델리게이트를 추가하십시오.

class AgendaViewController: UIViewController, UIAlertViewDelegate

사용자가 버튼을 클릭하면이 코드가 실행됩니다.

func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {


}

UIAlertView는 더 이상 사용되지 않습니다.
Parth Sane

7

이미 여러 종류의 팝업에 대한 개요 를 작성했지만 대부분의 사람들은 경고 만 필요합니다.

팝업 대화 상자를 구현하는 방법

여기에 이미지 설명을 입력하십시오

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(_ sender: UIButton) {

        // create the alert
        let alert = UIAlertController(title: "My Title", message: "This is my message.", preferredStyle: UIAlertController.Style.alert)

        // add an action (button)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))

        // show the alert
        self.present(alert, animated: true, completion: nil)
    }
}

내 완전한 답변은 여기에 있습니다 .


0

Xamarin.iOS의 C # 버전은 다음과 같습니다.

var alert = new UIAlertView("Title - Hey!", "Message - Hello iOS!", null, "Ok");
alert.Show();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.