iOS Beginner: окно UIAlertView с 3 кнопками> Проверить, какая кнопка была нажата - PullRequest
6 голосов
/ 31 декабря 2011

У меня есть рабочий код из учебника, но я не понимаю его полностью.

Положение:

После нажатия кнопки в приложении для 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);
}

Надеюсь, вы можете помочь, сводит меня с ума.

С уважением, Марк

1 Ответ

8 голосов
/ 31 декабря 2011

как это возможно, что метод ссылается на правильное представление предупреждения?

Именно по этой причине метод делегата alertView:didDismissWithButtonIndex: фактически сообщает вам, к какому виду оповещения он относится. Обратите внимание, что метод имеет два аргумента. Второй сообщает вам индекс кнопки, а первый указывает на представление предупреждений, к которому относится этот индекс кнопки.

Если у вас есть несколько представлений предупреждений с одним и тем же делегатом, вам придется проверить первый аргумент, о котором идет речь. Чтобы иметь возможность сделать это, вы должны сохранить представления предупреждений в ivar / свойстве или другой структуре данных, чтобы запомнить их в методе делегата. (Или, поскольку UIAlertView является подклассом UIView, вы можете использовать свойство tag для различения нескольких представлений).

...