我创建了UIAlertView
,现在我想查看用户按哪个按钮。
我的代码是:
- (IBAction)button1 {
{
UIAlertView *alert1 = [[UIAlertView alloc] init];
[alert1 setTitle:@"Hello"];
[alert1 setMessage:@"Do you like smoking?"];
[alert1 addButtonWithTitle:@"Yes"];
[alert1 addButtonWithTitle:@"No"];
[alert1 show];
}
}
如何使用if-else语句检查?
答案 0 :(得分:4)
您必须将UIAlertView
的委托设置为将处理来自UIAlertView
本身的回调的类
E.g。
[alert1 setDelegate:self];
self
是您当前UIViewController
实施协议<UIAlertViewDelegate>
的位置。
当用户点击按钮时,UIAlertView
将回拨您设置为委托的任何对象,在我的示例中,我们使用创建UIViewController
的{{1}}。一旦我们得到回调,我们就可以检查哪个按钮索引被点击并相应地采取行动。这是一个在整个iOS开发中使用的基本委派模式,尤其是UIKit。
示例强>
UIAlertView
在头文件或类接口扩展中指定您的类实现@interface MyViewController : UIViewController() <UIAlertViewDelegate>
@end
@implementation MyViewController
- (IBAction)button1 {
{
UIAlertView *alert1 = [[UIAlertView alloc] init];
[alert1 setTitle:@"Hello"];
[alert1 setMessage:@"Do you like smoking?"];
[alert1 addButtonWithTitle:@"Yes"];
[alert1 addButtonWithTitle:@"No"];
[alert1 setDelegate:self];
[alert1 show];
}
}
#pragma mark - UIAlertViewDelegate
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
// Handle interaction
switch (buttonIndex)
{
case 0:
NSLog(@"Yes was pressed");
break;
case 1:
NSLog(@"No was pressed");
break;
}
}
@end
非常重要。
我建议您查看UIAlertViewDelegate Protocol Reference以获取更多信息,并且您可以对许多其他UIKit组件采用此方法。
答案 1 :(得分:2)
在视图控制器中实施UIAlertViewDelegate
协议,将其设置为UIAlertView
的委托,并等待alertView:clickedButtonAtIndex:
事件,如下所示:
@interface MyViewController : UIViewController <UIAlertViewDelegate>
-(void)alertView:(UIAlertView *)alertView
clickedButtonAtIndex:(NSInteger)buttonIndex;
@end
@implementation MyViewController
-(void)alertView:(UIAlertView *)alertView
clickedButtonAtIndex:(NSInteger)buttonIndex {
NSLog(@"Button %d clicked...", (int)buttonIndex);
}
@end
更改显示警报视图的代码,如下所示:
UIAlertView *alert1 = [[UIAlertView alloc] init];
[alert1 setTitle:@"Hello"];
[alert1 setMessage:@"Do you like smoking?"];
[alert1 addButtonWithTitle:@"Yes"];
[alert1 addButtonWithTitle:@"No"];
alert1.delegate = self; // <<== Add this line
[alert1 show];
答案 2 :(得分:1)
添加Jeff的答案,我认为您必须启用其他按钮才能在单击按钮时放置逻辑。
要使用您的代码创建按钮:
- (IBAction)button1
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello"
message:@"Do you like smoking?"
delegate:self
cancelButtonTitle:@"Yes"
otherButtonTitles:@"No", nil];
[alert show];
}
但在知道单击了哪个按钮之前,您必须通过调用此委托方法启用第一个其他按钮:
- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
{
return YES;
}
这将启用您创建的NO按钮。然后,你将能够使用clickedButtonAtIndex方法做一些逻辑,我想你将会这样做。
实现UIAlertView委托方法:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0) {
// i love smoking!
} else if (buttonIndex == 1) {
// i hate smoking!
}
}
请务必在标题类中声明UIAlertViewDelegate。
确保alertViewShouldEnableFirstOtherButton:方法返回YES,否则您将无法在按下按钮时输入逻辑。
希望这有帮助! :)
答案 3 :(得分:0)
您可以做的最好的事情是使显示您的警报视图的类符合UIAlertViewDelegate
协议并实现方法–alertView:clickedButtonAtIndex:
。这样你就会知道点击了什么按钮。
希望这有帮助!