iOSでポップアップダイアログボックスを実装する方法


303

計算後、ユーザーにメッセージを伝えるポップアップまたは警告ボックスを表示したいと思います。これについての詳細情報がどこにあるか誰か知っていますか?

回答:


517

うん、a 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してinitメソッドにカスタムUIコンポーネントを配置できます。UIAlertViewが表示された後にボタンを押すことに応答する場合は、delegate上記を設定して、- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexメソッド。

もご覧くださいUIActionSheet


45
Appleのドキュメントには、「UIAlertViewクラスはそのまま使用することを目的としており、サブクラス化はサポートされていません」と記載されています。developer.apple.com/library/ios/#documentation/uikit/reference/...
JOM

40
ただのコメント:ARCが有効になっている場合、「[アラートリリース]」は必要ありません(少なくともコンパイラはそう言っています)。
Javier Sedano 2012年

4
UIAlertViewのサブクラス化はiOS 4以降ではサポートされていません
xySVerma '29

1
ここであなたもボタン操作が必要な場合は、デリゲートを持つ単純なUIAlertViewの一例である
guilherme.minglini

2
あなたが迅速なバージョンを探している場合は、チェックアウトオスカーSwanros'答え
ホジェリオシャベス

177

この質問に来る人は、ポップアップボックスによって意味が異なります。Temporary Viewsのドキュメントを読むことを強くお勧めします。私の答えは、主にこれと他の関連ドキュメントの要約です。

アラート(例を表示)

ここに画像の説明を入力してください

アラートには、タイトルとオプションのメッセージが表示されます。続行する前に、ユーザーはそれを確認する(1ボタンのアラート)か、簡単な選択(2ボタンのアラート)を行う必要があります。でアラートを作成しますUIAlertController

ドキュメントの警告と不要なアラートの作成に関するアドバイスを引用する価値があります。

ここに画像の説明を入力してください

ノート:

アクションシート(例を見せて)

ここに画像の説明を入力してください

アクションシートは、ユーザーに選択肢のリストを提供します。デバイスのサイズと向きに応じて、画面の下部またはポップオーバーに表示されます。アラートと同様に、a UIAlertControllerはアクションシートを作成するために使用されます。iOS 8以前UIActionSheetは使用されていましたが、今ではドキュメントに次のように記載されています。

重要: UIActionSheetはiOS 8では非推奨です(UIActionSheetDelegateこれも非推奨であることに注意してください)。iOS8以降でアクションシートを作成および管理するには、代わりにofを使用UIAlertControllerします。preferredStyleUIAlertControllerStyleActionSheet

モーダルビュー(例を表示)

ここに画像の説明を入力してください

モーダルビューは、それがタスクを完了するために必要なすべてを持っている自己完結型の図です。全画面表示される場合とされない場合があります。モーダルビューを作成するにUIPresentationControllerは、モーダルプレゼンテーションスタイルのいずれかでを使用します。

こちらもご覧ください

ポップオーバー(例を見せて)

ここに画像の説明を入力してください

A ポップオーバーは、それをオフタップしたときに何かにするとき、ユーザーのタップに表示され、消え図です。そこには、タップが行われたコントロールまたは場所を示す矢印があります。コンテンツは、View Controllerに配置できるほぼすべてのものにすることができます。でポップオーバーを作成しUIPopoverPresentationControllerます。(iOS 8より前UIPopoverControllerは、推奨される方法でした。)

これまで、ポップオーバーはiPadでしか利用できませんでしたが、iOS 8以降、iPhoneでも利用できます(ここここ、およびここを参照)。

こちらもご覧ください

お知らせ

ここに画像の説明を入力してください

通知は、アプリがフォアグラウンドで実行されていない場合でも、ユーザーに何かを通知する音/バイブレーション、アラート/バナー、またはバッジです。

ここに画像の説明を入力してください

こちらもご覧ください

Androidトーストに関する注意

ここに画像の説明を入力してください

Androidでは、トーストは短いメッセージであり、画面に短時間表示された後、ユーザーによるアプリの操作を中断することなく自動的に消えます。

Androidのバックグラウンドを持つ人々は、iOSバージョンのToastが何であるかを知りたいと思っています。これらの質問のいくつかの例は、彼が見つかりましたことができ、ここでここではここでは、とここに。答えは、iOSのトーストに相当するものはないということです。提示されているさまざまな回避策は次のとおりです。

  • サブクラス化して自分で作る UIView
  • トーストを模倣したサードパーティプロジェクトをインポートする
  • タイマーでボタンのないアラートを使用する

ただし、私のアドバイスは、すでにiOSに付属している標準のUIオプションを使用することです。アプリの外観と動作をAndroidバージョンとまったく同じにしようとしないでください。iOSアプリのように見えるように再パッケージする方法を考えてください。


3
Android Toastについてのメモがまだあります!いいね!この情報は、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を使用すると、アクションとアラートを表示するときの両方にコールバックを実装できます。これは非常に便利です。

Swift 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];
}

私の例では、自分自身がUIViewControllerであり、ポップアップの「presentViewController」メソッドを実装しています。

デビッド


11

Swift 3およびSwift 4の場合:

UIAlertViewは非推奨であるため、Swift 3でアラートを表示する良い方法があります

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 2017

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.