ボタンを押したときに電話をかけて警告を発します。私はこれを使います:
-(IBAction)Add {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"add button pressed"
message:@"Add to record"
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil ];
[alert show];
[alert release];
}
わかりました。ここでは問題ありません。2つのボタンが表示され、OKとキャンセルします。ここで、どのボタンが押されたかを検出したいと思います。
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
// the user clicked one of the OK/Cancel buttons
if (buttonIndex == 0)
{
//just to show its working, i call another alert view
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"OK WORKIng well"
message:@"no error" delegate:nil
cancelButtonTitle:@"IWORKS"
otherButtonTitles:@"NO PRB", nil];
[alert show];
[alert release];
}
else
{
NSLog(@"cancel");
}
}
今ここに問題があります。どのボタンが押されたかを検出できません。 2番目のアラートビューは表示されません。コードを数回確認しましたが、問題はないようです。エラー/警告もありません。
ボタンのクリックを検出するには、アラートビューに関連するdelegateが必要です。
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"add button pressed"
message:@"Add to record"
delegate:self // <------
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
これは私が使用して私のコードもいくつか追加したあなたのコードです。 **
-(IBAction) Add
{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"add button pressed"
message:@"Add to record"
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
alert.tag=101;//add tag to alert
[alert show];
[alert release];
}
アラートのボタンを押すと、clickedButtonAtIndexが呼び出されますが、すべてのアラートの識別子が必要です。タグを追加してから
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex**
{
// the user clicked one of the OK/Cancel buttons
if(alertView.tag == 101) // check alert by tag
{
if (buttonIndex == 0)
{
//just to show its working, i call another alert view
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"OK WORKIng well"
message:@"no error"
delegate:nil
cancelButtonTitle:@"IWORKS"
otherButtonTitles:@"NO PRB", nil];
[alert show];
[alert release];
}
else
{
NSLog(@"cancel");
}
}
}
それが役に立てば幸い。
0のbuttonIndexはキャンセルボタンです。私は使用をお勧めします:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 0)
{
NSLog(@"cancel");
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"OK works" message:@"no error" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
}
1)
.h file
@interface MyClassViewController:<UIAlertViewDelegate>
2)
.m file
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Note"
message:@"some message"
delegate:self // must be self to call clickedButtonAtIndex
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
3)
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == [alertView cancelButtonIndex]) {
NSLog(@"The cancel button was clicked from alertView");
}
else {
}
}
既存のアラートビューのボタンクリックイベントで新しいアラートビューを表示したい場合は、
- (void) alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
}
代わりにデリゲートメソッド
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
}
コードがよりクリーンでデリゲートに依存しない方がよい場合は、UIAlertViewのブロック実装を試してください。
https://github.com/steipete/PSAlertView
ただし、ブロックはiOS 4以降のデバイスでのみサポートされます。