Разрешить выбор только одной кнопки UIB - PullRequest
1 голос
/ 19 декабря 2011

У меня есть три подкласса UIButtons (RadioBox) s. Я пытаюсь сделать так, чтобы за один раз можно было выбрать только один из трех радиобоксов. Для этого у меня есть два метода делегата; radioSelectedState и radioUnselectedState. Соответственно, методы вызываются при выборе и отмене выбора RadioBox. К сожалению, мой код пока позволяет выбирать только одну кнопку одновременно, но если я отменил выбор текущей выбранной кнопки, кнопка отменяет выбор, а не остается в том же состоянии.

Пожалуйста, вы можете сказать мне, где я иду не так?

Спасибо заранее.

- (void) radioSelectedState:(RadioBox *) rb {

    if (selectedRadios == nil) {
        selectedRadios = [[NSMutableArray alloc] init];
   }

    if ([selectedRadios count] == 0) {
        [selectedRadios addObject:rb];
    }

    else if ([selectedRadios count] == 1 && ![selectedRadios containsObject:rb] ) {
        [(RadioBox *) [selectedRadios objectAtIndex:0] setState:RadioBoxStateUnselected];

        [selectedRadios removeObjectAtIndex:0];

        [selectedRadios addObject:rb];

    }

    else if ([selectedRadios count] == 1 && [selectedRadios containsObject:rb]) {
        return;
    }

}

- (void) radioUnselectedState:(RadioBox *) rb {

    if ([selectedRadios count] == 1) {
        return;
    }

    [selectedRadios removeObject:rb];

}

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

Вы можете легко хранить ваши объекты RadioBox внутри NSArray и проходить по ним каждый раз, когда один из них выбран, гарантируя, что все остальные будут отменены.

Что-то вроде:

// This assumes you have your RadioBox objects inside an NSArray named radioBoxArray
- (void)radioBoxTapped:(RadioBox *)rb {
    for (RadioBox * box in radioBoxArray) {
        [box setSelected:NO];
    }

    [rb setSelected:YES];
}
0 голосов
/ 19 декабря 2011

Добавьте новый метод к вашему протоколу.

- (BOOL)radioCanUnselect:(RadioBox *)radioBox;

. Вызовите его перед тем, как отменить выбор, контроллер просто отвечает YES / NO, а затем вы отвечаете соответственно.

Выможно также сделать то же самое другим способом

- (BOOL)radioCanSelect:(RadioBox *)radioBox;

и добавить правила для количества разрешенных для одновременного выбора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...