用户按下我的UIAlertView上的哪个按钮?

时间:2013-10-21 19:31:33

标签: ios objective-c cocoa-touch uialertview uialertviewdelegate

我创建了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语句检查?

4 个答案:

答案 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:。这样你就会知道点击了什么按钮。

希望这有帮助!