1

我已经创建了一个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

4 回答 4

4

您必须将您的委托设置为UIAlertView将处理来自UIAlertView自身的回调的类

例如

[alert1 setDelegate:self];

实现协议self的电流在哪里。UIViewController<UIAlertViewDelegate>

当用户点击一个按钮时,UIAlertView将回调您设置为委托的任何对象,在我的示例中,我们使用的UIViewController是创建UIAlertView. 一旦我们得到回调,我们可以检查哪个按钮索引被点击并采取相应的行动。这是在整个 iOS 开发中使用的基本委托模式,尤其是 UIKit。

例子

@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>.

我建议您查看UIAlertViewDelegate 协议参考以获取更多信息,并且您可以将这种方法用于许多其他 UIKit 组件。

于 2013-10-21T19:35:49.267 回答
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];
于 2013-10-21T19:34:32.543 回答
1

补充杰夫的答案,我认为您必须启用另一个按钮才能在单击按钮时放置您的逻辑。

为了使用您的代码创建按钮:

- (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,否则您将无法输入按下按钮时的逻辑。

希望这可以帮助!:)

于 2013-10-22T01:42:02.467 回答
0

您可以做的最好的事情是使呈现警报视图的类符合UIAlertViewDelegate协议并实现该方法–alertView:clickedButtonAtIndex:。这样你就知道点击了哪个按钮。

希望这可以帮助!

于 2013-10-21T19:34:43.547 回答