2013年04月11日

[iOS]画面遷移前にダイアログなどで確認をさせる。

画面遷移を実行する前に、ダイアログで本当に遷移するか確認させたり、あるいは遷移に必要なコードを入力させるようなことがある。

その場合の遷移コードをどこに書くかをここでは示す。

UIButtonで画面遷移の要求があったときに、UIAlertViewを使って確認の表示をしてOKの場合のみ画面遷移を行う。
ScreenShot2013.04.11b.png

ScreenShot2013.04.11a.png



- (void)alertView:(UIAlertView *)alertView
clickedButtonAtIndex:(NSInteger)buttonIndex
{
if ( buttonIndex == 1 ) {
DANextViewController *nextView;
nextView = [[DANextViewController alloc]
initWithNibName:@"DANextViewController"
bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:nextView animated:YES];
}
}

- (IBAction)secretAction:(id)sender {
UIAlertView *anAlert = [[UIAlertView alloc] initWithTitle:@"Danger!"
message:@"Do You Really Want to Go?"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
[anAlert show];
}

※ARCオン。iOS4.0以降利用可能。

アラートビューでなんらかのボタンが押された時に呼ばれるデリゲートメソッド中に遷移コードを書いてしまえばOK。


もしパスワードなどの入力フィールドを追加するとしたらオープンソースのダイアログを利用した方がよいと思うが、無理矢理ビューコントローラーに実装した場合を以下に示しておく。

ScreenShot2013.04.11c.png


- (void)alertView:(UIAlertView *)alertView
clickedButtonAtIndex:(NSInteger)buttonIndex
{
[self.textField resignFirstResponder];
if ( buttonIndex == 1 ) {
if ( ![self.textField.text isEqualToString:@"abc"]) {
AudioServicesPlayAlertSound(1000);
return;
}
DANextViewController *nextView = [[DANextViewController alloc]
initWithNibName:@"DANextViewController"
bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:nextView animated:YES];
}
}

- (IBAction)secretAction:(id)sender {
if ( !self.alertView ) {
UIAlertView *anAlert = [[UIAlertView alloc] initWithTitle:@"Need Password"
message:@"\n\n"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
UITextField *aTextField = [[UITextField alloc]
initWithFrame:CGRectMake(20.0, 52.0, 245.0, 30.0)];
aTextField.backgroundColor = [UIColor whiteColor];
aTextField.borderStyle = UITextBorderStyleRoundedRect;
aTextField.keyboardType = UIKeyboardTypeASCIICapable;
aTextField.autocapitalizationType = UITextAutocapitalizationTypeNone;
aTextField.secureTextEntry = YES;
aTextField.returnKeyType = UIReturnKeyDone;
aTextField.delegate = self;

[anAlert addSubview:aTextField];
self.alertView = anAlert;
self.textField = aTextField;
}
self.textField.text = @"";
[self.alertView show];
[self.textField becomeFirstResponder];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[self.alertView dismissWithClickedButtonIndex:1 animated:YES];
[self alertView:self.alertView clickedButtonAtIndex:1];
return YES;
}

※ARCオン。iOS4.0以降利用可能。


ちなみにヘッダーで以下の定義をしている。

@interface DAViewController
:
@property(nonatomic,retain) UIAlertView *alertView;
@property(nonatomic,retain) UITextField *textField;
:
@end

posted by 永遠製作所 at 15:24| 東京 ☁| Comment(0) | TrackBack(0) | iPhone/iPod touch | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/354907708
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック