добавление действия к кнопке alertView - PullRequest
1 голос
/ 05 января 2011

Я всех,

У меня есть 3 кнопки, каждая из которых вызывает AlertView с «Отмена» и «ОК», и каждая кнопка «ОК» переходит в другое представление.

на данный момент ярешил эту проблему с помощью

- (UIButton *)1_BTN
{ 
 if (1_BTN == nil)
 {
  UIImage *buttonBackground = [UIImage imageNamed:@"1_btn.png"];
  UIImage *buttonBackgroundPressed = [UIImage imageNamed:@"1_btn.png"];

  CGRect frame = CGRectMake(655, 985, 107, 30);

  1_BTN = [_IPadAppDelegate buttonWithTitle:@""
                                     target:self
                                   selector:@selector(1_BTN:)
                                      frame:frame
                                      image:buttonBackground
                               imagePressed:buttonBackgroundPressed];
 [1_BTN setTag:1];
}
return 1_BTN;
}
......

- (void)1_BTN:(NSInteger *)sender
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"some fancy text" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"ok", nil];

[alert setTag:[sender valueForKey:@"tag"]];
[alert show];
[alert release]; 
}

.......

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 

if (buttonIndex == 1) {
if ([[alertView tag] isEqualToNumber:[NSNumber numberWithInt:1]]) {
something should happen.....
}

для всех трех кнопок, и он отлично работает, но для

[alert setTag:[sender valueForKey:@"tag"]];

и

 if ([[alertView tag] isEqualToNumber:[NSNumber numberWithInt:1]]) {

я получаю это предупреждение "Неверный тип приемника"NSInteger" "

почему это так и как я могу решить эту проблему лучше?

Ответы [ 2 ]

2 голосов
/ 05 января 2011

Во-первых, вы делаете это совершенно неправильно. Реализуйте UIAlertViewDelegate, в частности alertView:clickedButtonAtIndex: и проверьте, какой индекс кнопки (от 0 .. n, где n - последняя кнопка). Действуйте соответственно, основываясь на ваших известных фиксированных индексах.

Во-вторых, NSInteger является скалярным необъектным типом и не может получать сообщения. Вместо этого вам нужно сравнение на равенство, т.е. alertview.tag == 1. Но, как я уже говорил, не делай так.

1 голос
/ 05 января 2011

Свойство UIView "tag" - это не объект, это просто NSInteger.Это почти то же самое, что и int, который вы, вероятно, знаете из C / C ++.Я исправил несколько строк в вашем коде.Теперь это должно работать.

Другое дело: распределение UIButton кажется мне немного страннымМожет быть, вам следует проверить управление памятью.

- (UIButton *)1_BTN
    { 
         if (1_BTN == nil) { 
             UIImage *buttonBackground = [UIImage imageNamed:@"1_btn.png"]; 
             UIImage *buttonBackgroundPressed = [UIImage imageNamed:@"1_btn.png"];

             CGRect frame = CGRectMake(655, 985, 107, 30);

             1_BTN = [_IPadAppDelegate buttonWithTitle:@"" target:self selector:@selector(1_BTNAction:) frame:frame image:buttonBackground imagePressed:buttonBackgroundPressed]; 
            [1_BTN setTag:1]; 
         } 
         return 1_BTN; 
    }




    - (void)1_BTNAction:(UIButton *)sender {
        NSInteger tagNumber = [sender tag];
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"sone fancy text" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"ok", nil];

        [alert setTag:tagNumber]; 
        [alert show]; 
        [alert release]; 
    }



    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
        if (buttonIndex == 1) {
            if ([alertView tag] == 1) {
                //something should happen
            }
        }
    }
...