Я бы не советовал отмечать вашу 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];
}
}
}