IBAction в UIAlertView xcode 4.3 - PullRequest
       14

IBAction в UIAlertView xcode 4.3

0 голосов
/ 07 марта 2012

У меня в приложении есть счетчик, в котором есть кнопка сброса, но вместо сброса сразу после нажатия я хочу, чтобы всплывающее окно UIAlertView и пользователь снова нажал «Сброс» в качестве кнопки в предупреждении. Я не совсем хорошо разбираюсь в этом, поэтому я бы попросил, чтобы ваш ответ просто добавил / заменил части моего кода ниже. Я работаю над этим лол. Спасибо за любую помощь!

- (IBAction)reset {
    UIAlertView *alert = [[UIAlertView alloc] 

                          initWithTitle:@"titleHere"
                          message:@"messageHere"
                          delegate: self
                          cancelButtonTitle:@"Cancel"
                          otherButtonTitles:@"Reset", nil];
    alert.tag = TAG_RESET;
    [alert show];
}

-(void)alertView:(UIAlertView *)alertView
clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (alertView.tag == TAG_DEV) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.examplesite.com"]]; // just another alert don't worry about this one
    } else if (alertView.tag == TAG_RESET) { // i need help here        
    }
}

Так что, по сути, это просто IBAction в оповещении.

UPDATE: Как бы я включил это в кнопку?

-(IBAction)zero {
    counter=0;
    count.text = [NSString stringWithFormat:@"%i",counter];
}

UPDATE2:

Итак, я сделал это, что теперь отлично сбрасывает счет, единственная проблема - теперь, когда вы нажимаете кнопку «Отмена» или «Сброс», продолжает появляться предупреждение ...

-(IBAction)resetButtonPushed {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"titleHere"
                                                    message:@"messageHere"
                                                   delegate:self
                                          cancelButtonTitle:@"Cancel"
                                          otherButtonTitles:@"Reset", nil];
    alert.tag = TAG_RESET;
    [alert show];
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (alertView.tag == TAG_DEV){
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.examplesite.com"]]; // just another alert don't worry about this one
    }
    else if (alertView.tag == TAG_RESET) { [self resetButtonPushed]; {
        counter=0;
        count.text = [NSString stringWithFormat:@"%i",counter];
    }        if ([[alertView buttonTitleAtIndex:buttonIndex] isEqualToString:@"Reset"]){
        // Reset button tapped
        }
    }
}

1 Ответ

0 голосов
/ 07 марта 2012

Я бы не советовал отмечать вашу zero функцию как IBAction, когда вы просматриваете свой код позже, это может сбить с толку.

Имена вашего метода сброса также могут сбивать с толку.Я бы предложил более описательное имя.А также использование стандартного IBAction метода сигнатуры взятия в параметре отправителя.Вот так:

-(IBAction)resetButtonPushed:(id)sender {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"titleHere"
                                                    message:@"messageHere"
                                                   delegate: self
                                          cancelButtonTitle:@"Cancel"
                                          otherButtonTitles:@"Reset", nil];
    alert.tag = TAG_RESET;
    [alert show];
}

Казалось бы, вы знакомы с парадигмой UIAlertViewDelegate ожидания обратного вызова.Поскольку вы используете -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex, вы должны использовать параметр clickedButtonAtIndex:(NSInteger)buttonIndex, переданный в метод делегата.Вот так:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (alertView.tag == TAG_DEV){
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.examplesite.com"]]; // just another alert don't worry about this one
    }
    else if (alertView.tag == TAG_RESET) {
        if (buttonIndex == alertView.cancelButtonIndex){
            // reset alert cancel button was tapped
        }
        else {
            // Reset button tapped
        }
    }
}

В качестве альтернативы вы можете сделать что-то вроде:

if ([[alertView buttonTitleAtIndex:buttonIndex] isEqualToString:@"Reset"]){
    // Reset button tapped
}

Этот раздел в ответ на комментарий

Я неконечно, почему вам трудно понять, как вызывать ваш метод zero.Я предполагаю, что это потому, что термин IBAction излишне отвлекает вас.IBAction это еще один способ сказать void.Разница лишь в том, что при использовании IBAction построитель интерфейса «видит» метод.Что касается кода, следующие два определения методов идентичны.

-(void)zero;
-(IBAction)zero;

Опять-таки, я бы посоветовал не использовать IBAction и более описательное имя метода.Возможно, что-то вроде:

-(void)zeroTheCounter {
    counter=0;
    count.text = [NSString stringWithFormat:@"%i",counter];
}

Вы бы, конечно, вызвали этот метод, как и любой другой, чтобы использовать его в контексте приведенного выше примера.

        else {
            // Reset button tapped
            [self zeroTheCounter];
        }

Ответ на"edit 2" Конечно, он показывает другое представление оповещения, вы запрашиваете его с помощью вызова [self resetButtonPushed] в методе делегата alertview.

В этом редакторе используется код, указанный в вашем вопросе.

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (alertView.tag == TAG_DEV){
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.examplesite.com"]]; // just another alert don't worry about this one
    }
    else if (alertView.tag == TAG_RESET) { 
        //[self resetButtonPushed]; { calling this will cause another alertview.
        //counter=0; this is done is zero
        //count.text = [NSString stringWithFormat:@"%i",counter]; this is done in zero
        //} 
        if ([[alertView buttonTitleAtIndex:buttonIndex] isEqualToString:@"Reset"]){
            // Reset button tapped
            [self zero];
        }
    }
}
...