Кнопка обнаружения с помощью UIAlertView
Я пытаюсь вызвать и предупредить, когда нажата кнопка. Я использую это:
-(IBAction)Add {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"add button pressed"
message:@"Add to record"
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil ];
[alert show];
[alert release];
}
ОК, здесь нет проблем, две кнопки подошли, ОК и отменили. Теперь я хочу определить, какая кнопка нажата, я использую:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
// the user clicked one of the OK/Cancel buttons
if (buttonIndex == 0)
{
//just to show its working, i call another alert view
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"OK WORKIng well"
message:@"no error" delegate:nil
cancelButtonTitle:@"IWORKS"
otherButtonTitles:@"NO PRB", nil];
[alert show];
[alert release];
}
else
{
NSLog(@"cancel");
}
}
теперь вот проблема. я не могу определить, какая кнопка нажата; второе предупреждение не отображается. Я проверяю код пару раз, с этим не возникает никаких проблем. нет ошибки/предупреждения.
Ответы
Ответ 1
Для обнаружения нажатия кнопки представление предупреждения должно иметь ассоциированный делегат, например
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"add button pressed"
message:@"Add to record"
delegate:self // <------
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
Ответ 2
Это ваш код, который я использовал и добавил некоторый мой код.
**
-(IBAction) Add
{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"add button pressed"
message:@"Add to record"
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
alert.tag=101;//add tag to alert
[alert show];
[alert release];
}
Теперь, когда вы нажимаете кнопку в режиме оповещения, он будет вызывать clickedButtonAtIndex но там должен быть идентификатор для каждого предупреждения. Поэтому добавьте тег, а затем
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex**
{
// the user clicked one of the OK/Cancel buttons
if(alert.tag=101) // check alert by tag
{
if (buttonIndex == 0)
{
//just to show its working, i call another alert view
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"OK WORKIng well"
message:@"no error"
delegate:nil
cancelButtonTitle:@"IWORKS"
otherButtonTitles:@"NO PRB", nil];
[alert show];
[alert release];
}
else
{
NSLog(@"cancel");
}
}
}
Надеюсь, что это поможет.
Ответ 3
КнопкаIndex 0 - кнопка отмены. Я бы рекомендовал использовать:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 0)
{
NSLog(@"cancel");
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"OK works" message:@"no error" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
}
Ответ 4
Я чувствую, что если вы хотите показать новое представление предупреждения о событии нажатия кнопки существующего вида предупреждения, было бы лучше использовать
- (void) alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
}
метод делегата вместо
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
}
Ответ 5
1)
.h file
@interface MyClassViewController:<UIAlertViewDelegate>
2)
.m file
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Note"
message:@"some message"
delegate:self // must be self to call clickedButtonAtIndex
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
3)
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == [alertView cancelButtonIndex]) {
NSLog(@"The cancel button was clicked from alertView");
}
else {
}
}
Ответ 6
Если вы предпочитаете, чтобы ваш код был более чистым и не зависел от делегата, вы должны попробовать реализовать реализацию блоков UIAlertView:
https://github.com/steipete/PSAlertView
Блоки поддерживаются только на устройствах iOS 4+.