次のようなカテゴリを作成して、コードを再利用できます。
*.h ファイル
@interface UIViewController(Transitions)
- (void) showAlertWithDelegate: (id) delegate;
@end
*.m ファイル
-(void) showAlertWithDelegate:(id)delegate {
id _delegate = ( delegate == nil) ? self : delegate;
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle: NSLocalizedString(@"Alert Text",@"Alert Text")
message: NSLocalizedString( @"Msg Alert",@"Msg Alert")
delegate:_delegate
cancelButtonTitle:nil
otherButtonTitles: NSLocalizedString(@"OK",@"OK"),nil];
[alert setTag:0]; //so we know in the callback of the alert where we come from - in case we have multiple different alerts
[alert show];
}
//the local callback for the alert - this handles the case when we call the alert with delegate nil
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
D_DBG(@"%i %i",[alertView tag],buttonIndex);
}
アラートが必要な UIViewController クラスに *.h ファイルをインポートします。
次のように呼び出す場合:
[self showAlertWithDelegate:nil];
アラートが表示され、デリゲートが実装されます
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
インターフェースでは、次のように呼び出します。
[self showAlertWithDelegate:self];
コールバックを提供する必要があります
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
あなたがそれを呼び出したクラスでは、ユーザーが押したものは何でも処理できます-インターフェイスに実装されているものとは異なります。