UIAlertView
メソッドを使用したiOS7では、いくつかのコントロールをaddSubview
に追加することは非推奨になりました。私が知っているように、AppleはcontentView
プロパティを追加することを約束しました。
iOS 7がリリースされましたが、このプロパティは追加されていません。そのため、このalertViewにプログレスバーを追加できるカスタムソリューションを探しています。たとえば、 TSAlertView に似ていますが、iOS 7で使用する準備が整っています。
これはGithubのプロジェクトです iOS7のUIAlertViewに見えるダイアログにUIViewを追加します。
( このStackOverflowスレッド からコピー)
Appleのように見える独自のアラートビューを作成するのにたった1日しかかかりませんでした
UIButton
の代わりにテーブルを使用するようになりました。デフォルトのテーブルセルで十分です)。 3つのボタンテーブルが必要であることに注意してください。左と右のボタン用に2つ(ボタンの数が2の場合)、他の場合に別のテーブル(1つまたは2つ以上のボタン)。カスタムアラートでUIAlertView
のすべてのメソッドを実装します。
表示/非表示-アラート用の特定のモーダルウィンドウを作成できますが、ルートビューコントローラーの上にアラートを配置するだけです。目に見えるアラートを静的配列に登録します。最初のアラートを表示する/最後のアラートを消す場合は、ウィンドウ/ビューコントローラーの色合いモードを淡色表示/自動に変更し、淡色表示を追加/削除します(アルファ= 0.2の黒)。
編集:
背景ぼかしとパララックス効果の両方のサンプルコードは、「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
}];
完全なUIAlertView APIを模倣するUIAlertViewの完全な実装を作成しましたが、私たちがずっと望んでいたcontentViewプロパティを追加します: SDCAlertView 。
コードの行を書かずにシンプルで効果的な方法を愛する人のために。 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];
}
それが何かを助けることを願っています、ありがとう:)
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];
IOS7のカスタムビューではUIAlertView
も、Appleが気を変えたcontentView
も存在しないので、addSubview
はUIAlertView
では不可能になりました。
Appleのフォーラムの多くのスレッドによると、良い選択肢は SVProgressHUD です。
編集:
iOS7にはaddSubview
の正式なUIAlertView
もサブクラスもありません。
UIAlertViewクラスはそのまま使用することを目的としており、サブクラス化はサポートしていません。このクラスのビュー階層はプライベートであり、変更しないでください。
他の良い代替案:
追加のクラスなしで簡単なソリューションを見つけることができます here
通常のUIAlertViewの設定accessoryViewに基づいています。
PKAlertController( https://github.com/goodpatch/PKAlertController )は素晴らしいライブラリです。同様のライブラリを多数テストしましたが、これですべての要件が満たされました。
なぜクールなのか: