web-dev-qa-db-ja.com

iOS7のUIAlertView addSubview

UIAlertViewメソッドを使用したiOS7では、いくつかのコントロールをaddSubviewに追加することは非推奨になりました。私が知っているように、AppleはcontentViewプロパティを追加することを約束しました。

iOS 7がリリースされましたが、このプロパティは追加されていません。そのため、このalertViewにプログレスバーを追加できるカスタムソリューションを探しています。たとえば、 TSAlertView に似ていますが、iOS 7で使用する準備が整っています。

67
B.S.

これはGithubのプロジェクトです iOS7のUIAlertViewに見えるダイアログにUIV​​iewを追加します。

このStackOverflowスレッド からコピー)

Custom iOS7 AlertView dialog

55
Wimagguc

Appleのように見える独自のアラートビューを作成するのにたった1日しかかかりませんでした

  1. 参考のために、Appleのアラートのスクリーンショットを撮ります(フォントサイズ、間隔、幅)
  2. タイトル、メッセージ、カスタムビュー、ボタンのテーブルを含むxibを作成します(AppleはUIButtonの代わりにテーブルを使用するようになりました。デフォルトのテーブルセルで十分です)。 3つのボタンテーブルが必要であることに注意してください。左と右のボタン用に2つ(ボタンの数が2の場合)、他の場合に別のテーブル(1つまたは2つ以上のボタン)。
  3. カスタムアラートでUIAlertViewのすべてのメソッドを実装します。

  4. 表示/非表示-アラート用の特定のモーダルウィンドウを作成できますが、ルートビューコントローラーの上にアラートを配置するだけです。目に見えるアラートを静的配列に登録します。最初のアラートを表示する/最後のアラートを消す場合は、ウィンドウ/ビューコントローラーの色合いモードを淡色表示/自動に変更し、淡色表示を追加/削除します(アルファ= 0.2の黒)。

  5. 背景がぼやけ-Appleのサンプルコードを使用(不透明な白を使用)
  6. 3Dダイナミックエフェクト-Appleのサンプルコード(5行のコード)を使用します。素敵な効果が必要な場合は、手順5で少し大きいスナップショットを撮り、アラートの背景と前景に逆アニメーターを追加します。

編集:

背景ぼかしとパララックス効果の両方のサンプルコードは、「iOS_RunningWithASnap」WWDC 2013サンプルコードにあります。

パララックス効果:

UIInterpolatingMotionEffect* xAxis = [[[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x"
                                                                                     type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis] autorelease];
xAxis.minimumRelativeValue = [NSNumber numberWithFloat:-10.0];
xAxis.maximumRelativeValue = [NSNumber numberWithFloat:10.0];

UIInterpolatingMotionEffect* yAxis = [[[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y"
                                                                                     type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis] autorelease];
yAxis.minimumRelativeValue = [NSNumber numberWithFloat:-10.0];
yAxis.maximumRelativeValue = [NSNumber numberWithFloat:10.0];

UIMotionEffectGroup *group = [[[UIMotionEffectGroup alloc] init] autorelease];
group.motionEffects = @[xAxis, yAxis];
[self addMotionEffect:group];

背景がぼやけているだけが複雑です。代わりに不透明色を使用できる場合は、それを使用します。さもなければ、それは多くの実験です。また、背景が暗い場合、背景をぼかすことは良い解決策ではないことに注意してください。

アニメーションの表示/非表示には、新しいスプリングアニメーションメソッドを使用しています。

void (^animations)() = ^{
    self.alpha = 1.0f;
    self.transform = CGAffineTransformIdentity;
};

self.alpha = 0.0f;
self.transform = CGAffineTransformMakeScale(0.5f, 0.5f);

[UIView animateWithDuration:0.3
                      delay:0.0
     usingSpringWithDamping:0.7f
      initialSpringVelocity:0.0f
                    options:UIViewAnimationOptionCurveLinear
                 animations:animations
                 completion:^(BOOL completed) {
                         //calling UIAlertViewDelegate method
                     }];
35
Sulthan

完全なUIAlertView APIを模倣するUIAlertViewの完全な実装を作成しましたが、私たちがずっと望んでいたcontentViewプロパティを追加します: SDCAlertView

image

32

コードの行を書かずにシンプルで効果的な方法を愛する人のために。 iOS 7アラートビューにサブビューを追加するために、他のプライベートフレームを使用しないクールなソリューションを次に示します。

[alertView setValue:imageView forKey:@ "accessoryView"];

理解を深めるためのサンプルコード、

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(180, 10, 85, 50)];
UIImage *wonImage = [UIImage imageNamed:@"image.png"];
[imageView setImage:wonImage];

//check if os version is 7 or above
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
      [alertView setValue:imageView forKey:@"accessoryView"];
}else{
      [alertView addSubview:imageView];
}

それが何かを助けることを願っています、ありがとう:)

27

IOS7の場合

UIAlertView *alertView1 = [[UIAlertView alloc] initWithTitle:@"Enter Form Name" 
                                               message:@""
                                               delegate:self 
                                               cancelButtonTitle:@"Cancel"
                                               otherButtonTitles:@"Ok", nil];
alertView1.alertViewStyle = UIAlertViewStyleSecureTextInput;
UITextField *myTextField = [alertView1 textFieldAtIndex:0];
[alertView1 setTag:555];
myTextField.keyboardType=UIKeyboardTypeAlphabet;

[alertView1 show];
17
Ganesh manoj

IOS7のカスタムビューではUIAlertViewも、Appleが気を変えたcontentViewも存在しないので、addSubviewUIAlertViewでは不可能になりました。

Appleのフォーラムの多くのスレッドによると、良い選択肢は SVProgressHUD です。

編集

iOS7にはaddSubviewの正式なUIAlertViewもサブクラスもありません。

UIAlertViewクラスはそのまま使用することを目的としており、サブクラス化はサポートしていません。このクラスのビュー階層はプライベートであり、変更しないでください。

他の良い代替案:

ios-custom-alertview by wimagguc

MZFormSheetController

10
null

追加のクラスなしで簡単なソリューションを見つけることができます here

通常のUIAlertViewの設定accessoryViewに基づいています。

1
malex

PKAlertController( https://github.com/goodpatch/PKAlertController )は素晴らしいライブラリです。同様のライブラリを多数テストしましたが、これですべての要件が満たされました。

なぜクールなのか:

  • カスタムビューをサポート
  • IOS7をサポート
  • ビューコントローラーです
  • モーションエフェクトを含むネイティブアラートビューのように動作し、見える
  • カスタマイズ可能
  • UIAlertControllerのような同様のインターフェース
1
Igor Palaguta