【问题标题】:iOS Beginner: UIAlertView Window with 3 Buttons > Check what button was pressediOS 初学者:带有 3 个按钮的 UIAlertView 窗口 > 检查按下了什么按钮
【发布时间】:2023-03-07 13:30:01
【问题描述】:

我有一个教程中的工作代码,但不完全理解。

情况:

在我的 iPhone 应用程序中按下按钮后 出现一个带有三个按钮的 AlertView。 现在我想检查用户按下了什么按钮。

教程中的代码:

- (IBAction)infoButtonPressed:(id)sender {

    UIAlertView *myAlert1 = [[UIAlertView alloc]initWithTitle:@"My Alert View 1" 
                                                   message:@"Here we go" 
                                                  delegate:self 
                                         cancelButtonTitle:@"Cancel" 
                                         otherButtonTitles:@"Option1", @"Option2", nil];

    [alert show];
}





- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    NSLog(@"Button: %i, was pressed.", buttonIndex);
}

代码有效,我在控制台中看到正确的输出为 NSLog,但怎么可能 那个方法:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    NSLog(@"Button: %i, was pressed.", buttonIndex);
}

指的是正确的警报视图。在这种情况下:myAlert1。

如果有多个警报视图呢? 例如第二个调用 myAlert2。

我知道下面的代码不正确,但它对我来说更有意义 如果我将方法编写如下:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    NSLog(@"Button: %i, was pressed.", buttonIndex_FROM_myAlert1);
}

希望你能帮上忙,把我逼疯了。

问候, 马克

【问题讨论】:

    标签: objective-c methods indexing uialertview


    【解决方案1】:

    该方法如何引用正确的警报视图?

    正是因为这个原因,委托方法alertView:didDismissWithButtonIndex:实际上告诉你它指的是哪个警报视图。请注意,该方法有两个参数。第二个告诉您按钮索引,第一个指向该按钮索引所指的警报视图。

    如果您有多个共享同一个委托的警报视图,则必须检查第一个参数是关于哪个警报视图。为此,您必须将警报视图存储在 ivar/property 或其他数据结构中,以便在委托方法中记住它们。 (或者,由于UIAlertViewUIView 的子类,您可以使用tag 属性来区分多个视图)。

    【讨论】:

    • 感谢 Ole,现在知道了。 Guten Rutsch ins neue Jahr! (德语表示新年快乐);-)
    • 除了您的回答之外,我刚刚发现了一篇关于多个警报视图以及如何区分它们+代码的精彩帖子。仅适用于遇到相同问题的其他初学者:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2013-08-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多