UIAlertView
さらにいくつかのプロパティを追跡できるのサブクラスを使用することをお勧めします。私はすべてのプロジェクトでこれを行いますが、はるかに簡単です。
- これを行う 1 つの解決策は、サブクラス化
UIAlertView
してorMyAlertView
を追加することです。したがって、カスタム データを にアタッチし、デリゲート メソッドで取得して、必要なことを行うことができます。@property(nonatomic, retain) id userInfo;
@property(nonatomic, retain) NSURL* urlToOpen
UIAlertView
- もう 1 つの解決策 (実際に私が好む解決策) は、Objective-C ブロックのサポートを に追加して、を使用する代わりにブロック API を
UIAlertView
使用できるようにすることです。単一のデリゲートを使用して異なるインスタンスを処理するのは混乱するため、これは、同じクラスで同じデリゲートを使用して複数を使用する場合に特に便利です。UIAlertView
delegate
UIAlertViews
私は個人的にこの手法を常に使用しています。ボタンがタップされたときに実行されるコードを、アラートを表示するコードのすぐ隣に配置することで、コードを読みやすくするためです。デリゲート メソッド。
これを既に実装しているOHAlertView
GitHubの私のサブクラスを見ることができます。使い方は非常に簡単で、共通のデリゲートの代わりにアラート ビューごとにブロックを使用できます。以下を参照してください。
使用例
-(void)confirmOpenURL:(NSURL*)url
{
NSString* message = [NSString string WithFormat:@"Open %@ in Safari?",
url.absoluteString];
[OHAlertView showAlertWithTitle:@"Open URL"
message:message
cancelButton:@"No"
okButton:@"Yes"
onButtonTapped:^(OHAlertView* alert, NSInteger buttonIndex)
{
if (buttonIndex != alert.cancelButtonIndex)
{
// If user tapped "Yes" and not "No"
[[UIApplication sharedApplication] openURL:url];
}
}];
}
次に、各ボタンに独自のアクションを設定できます。
-(IBAction)button1Action
{
[self confirmOpenURL:[NSURL URLWithString:@"http://www.google.com"]];
}
-(IBAction)button2Action
{
[self confirmOpenURL:[NSURL URLWithString:@"http://www.stackoverflow.com"]];
}
または、URL を開くすべてのボタンに共通の IBAction を設定できます。
-(IBAction)commonButtonAction:(UIButton*)sender
{
NSUInteger tag = sender.tag;
NSString* urls[] = { @"http://www.google.com", @"http://www.stackoverflow.com" };
NSURL* buttonURL = [NSURL URLWithString: urls[tag] ]; // in practice you should check that tag is between 0 and the number of urls to be sure, that's just an example here
[self confirmOpenURL:buttonURL];
}