Выбор предупреждающего сообщения в зависимости от ввода от пользователя

71
10

Я пытаюсь определить, нажал ли пользователь кнопку cancelButton или деструктивная кнопка на листе actionSheet. В зависимости от его ввода я хотел бы изменить предупреждающее сообщение, отображаемое на экране.


Итак, я попробовал использовать if для проверки buttonIndex, но оказывается, что значение buttonIndex не изменяется при вводе пользователем.


UIActionSheet *informUser = [[UIActionSheet alloc] initWithTitle:@"Missing data" delegate:self cancelButtonTitle:@"Thanks for telling me!" destructiveButtonTitle:@"I have ignored it!" otherButtonTitles:nil];

[informUser showInView:self.view];

// NSLog(@"Cancel button = %d", informUser.cancelButtonIndex);
// NSLog(@"Destructive button = %d", informUser.destructiveButtonIndex);

if(informUser.cancelButtonIndex == 1)
{
NSString *msg = [[NSString alloc] initWithFormat:@"Pls enter the number."];

UIAlertView *alertUser = [[UIAlertView alloc] initWithTitle:@"Missing data" message:msg delegate:self cancelButtonTitle:@"Thanks!" otherButtonTitles:nil];

[alertUser show];
}


Я также попытался использовать отдельный метод:


-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex;

но я получаю неправильные результаты, когда у меня есть несколько UIAlert в разных точках на одном экране.


Короче говоря, я хотел бы использовать другой UIAlert для разных действий/входов от пользователя. Поэтому, как определить, какая кнопка на кнопке actioSheet была нажата пользователем?


Спасибо.

спросил(а) 2012-09-18T17:17:00+04:00 8 лет, 1 месяц назад
1
Решение
58

Внедрите UIActionSheetDelegate и используйте метод:


– actionSheet:clickedButtonAtIndex: 

Индекс определяет, какую кнопку вы нажали.


Если вы не хотите использовать индекс кнопки, вы можете получить название кнопки нажатой кнопки с помощью


– buttonTitleAtIndex:

Затем вы можете сравнить результат с строкой заголовка вашей кнопки.


Подробнее читайте в документах Apple


Edit:
Если вы хотите использовать больше таблиц действий, вы можете установить значение тега для каждого из них. Например. ActionSheet1 имеет actionheet.tag = 1 и т.д.

Затем вы можете включить – actionSheet:clickedButtonAtIndex: в тег данного листа действий. Например:.


switch (actionsheet.tag) {
case 1:
// do stuff
break;
case 2:
// do stuff
break;
default: break;
}

Изменить 2:
Это образец класса, который должен показать вам логику:


Заголовочный файл:


#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIActionSheetDelegate>

@end


Файл реализации:


#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

UIActionSheet *as1 = [[UIActionSheet alloc] initWithTitle:@"Title" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Delete" otherButtonTitles:@"Ok", nil];
as1.tag = 0;
as1.delegate = self;

UIActionSheet *as2 = [[UIActionSheet alloc] initWithTitle:@"Title2" delegate:self cancelButtonTitle:@"Cancel2" destructiveButtonTitle:@"Delete2" otherButtonTitles:@"Ok2", nil];
as2.tag = 1;
as2.delegate = self;
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
switch (actionSheet.tag) {
case 0: // as1
switch (buttonIndex) {
case 0:
// button index 0
break;

case 1:
// button index 1
break;

//....

default:
break;
}
break;

case 1: // as2
switch (buttonIndex) {
case 0:
// button index 0
break;

case 1:
// button index 1
break;

//....

default:
break;
}
break;

default:
break;
}
}

@end

ответил(а) 2012-09-18T17:30:00+04:00 8 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема