Самое странное событие: UIButton @selector обнаруживает правильную кнопку, неправильно делает else_if? - PullRequest
3 голосов
/ 12 марта 2010

Итак, я динамически создаю 3 кнопки UIB (пока) с помощью этого цикла:

NSMutableArray *sites = [[NSMutableArray alloc] init];

     NSString *one = @"Constution Center";
     NSString *two = @"Franklin Court";
     NSString *three = @"Presidents House";

     [sites addObject: one];
     [one release];

     [sites addObject: two];
     [two release];

     [sites addObject: three];
     [three release];

     NSString *element;
     int j = 0;
     for (element in sites)
     {
         UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

         //setframe (where on screen)
         //separation is 15px past the width (45-30)
         button.frame = CGRectMake(a, b + (j*45), c, d);

         [button setTitle:element forState:UIControlStateNormal];

         button.backgroundColor = [SiteOneController myColor1];

        [button addTarget:self action:@selector(showCCView:)
        forControlEvents:UIControlEventTouchUpInside];
         [button setTag:j];

         [self.view addSubview: button];
         j++;
     }

Метод @Selector находится здесь:

- (void) showCCView:(id) sender {

    UIButton *button = (UIButton *)sender;
    int whichButton = button.tag;
    NSString* myNewString = [NSString stringWithFormat:@"%d", whichButton];
    self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
    self.view.backgroundColor = [UIColor whiteColor];

    UINavigationBar *cc = [SiteOneController myNavBar1:@"Constitution Center Content"];
    UINavigationBar *fc = [SiteOneController myNavBar1:@"Franklin Court Content"];
    UINavigationBar *ph = [SiteOneController myNavBar1:@"Presidents House Content"];

    if (whichButton = 0) 
    {
        NSLog(myNewString);
        [self.view addSubview:cc];
    }
    else if (whichButton = 1) 
    {
        NSLog(myNewString);
        [self.view addSubview:fc];
    }
    else if (whichButton = 2) 
    {
        NSLog(myNewString);
        [self.view addSubview:ph];
    }
}

Теперь он печатает правильный тег кнопки в NSLog, как показано в методе, однако КАЖДАЯ ОДНА КНОПКА отображает панель навигации с надписью «Franklin Court», КАЖДЫЙ ОДИН, даже когда я нажимаю кнопку 0 , в консоли написано «кнопка 0 нажата», но все равно выполняется код else if (whichButton = 1).

Я что-то здесь упускаю?

Ответы [ 2 ]

7 голосов
/ 12 марта 2010

Вы используете оператор = вместо оператора == в ваших условиях, что делает сравнение вместо сравнения.

Так как возвращаемое значение присваивания является присвоенным значением, сначала whichButton становится 0, и это оценивается как false, а затем whichButton становится 1, и это становится истинным, и независимо от того, что вы делаете вы в конечном итоге с выбором Франклин Корт.

2 голосов
/ 12 марта 2010

У вас есть проблема, когда вы должны были использовать == вместо =.

Вместо этого:

    if (whichButton = 0) 
    {
        NSLog(myNewString);
        [self.view addSubview:cc];
    }
    ...

Попробуйте это:

    if (whichButton == 0) 
    {
        NSLog(myNewString);
        [self.view addSubview:cc];
    }
    else if (whichButton == 1) 
    {
        NSLog(myNewString);
        [self.view addSubview:fc];
    }
    else if (whichButton == 2) 
    {
        NSLog(myNewString);
        [self.view addSubview:ph];
    }

Или это:


NSLog (myNewString); //occurs in all cases.

switch (whichButton)
{
    case 0:
        [self.view addSubview:cc];
        break;
    case 1:
        [self.view addSubview:fc];
        break;
    case 2:
        [self.view addSubview:ph];
        break;
    default:
        // optionally handle the case where the button's tag was not 0, 1, or 2.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...