Как создать пользовательский UIButton внутри UIAlertView

Поэтому я пытаюсь встроить переключаемую (это слово?) Кнопку "Больше не показывать" в UIAlertView, но у меня возникли некоторые проблемы, которые я, кажется, не могу обойти.

Вот мой неработающий код до сих пор...

Отредактировано: я добавил метод кнопки, и сделал некоторые изменения в исходном коде. Теперь я получаю кнопку, чтобы реагировать на пресс, но в результате происходит сбой. Любая помощь?

if (![[NSUserDefaults standardUserDefaults] objectForKey:@"disclaimer"]){


UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"DISCLAIMER" 
                                                message:@"This program is a blah blah"
                                               delegate:self 
                                      cancelButtonTitle:nil
                                      otherButtonTitles:@"I Agree", nil];

UILabel *alertLabel = [[UILabel alloc] initWithFrame:CGRectMake(30, 230, 260, 50)];
alertLabel.backgroundColor = [UIColor clearColor];
alertLabel.textColor = [UIColor whiteColor];
alertLabel.text = @"Do not show again";
[alert addSubview:alertLabel];
[alertLabel release];

//declared alertCheckboxButton in the header due to errors I was getting when referring to the button in the button's method below
alertCheckboxButton = [UIButton buttonWithType:UIButtonTypeCustom];
alertCheckboxButton.frame = CGRectMake(200, 247, 16, 16);
alertCheckboxButton.backgroundColor = [UIColor clearColor];
UIImage *alertButtonImageNormal = [UIImage imageNamed:@"checkbox.png"];
UIImage *alertButtonImagePressed = [UIImage imageNamed:@"checkbox-pressed.png"];
UIImage *alertButtonImageChecked = [UIImage imageNamed:@"checkbox-checked.png"];
[alertCheckboxButton setImage:alertButtonImageNormal forState:UIControlStateNormal];
[alertCheckboxButton setImage:alertButtonImagePressed forState:UIControlStateHighlighted];
[alertCheckboxButton setImage:alertButtonImageChecked forState:UIControlStateSelected];
[alertCheckboxButton addTarget:self action:@selector(alertCheckboxButtonClicked:) forControlEvents:UIControlEventTouchUpInside];

//made the button a subview of alert rather than alertLabel
[alert addSubview:alertCheckboxButton];  
[alert show];

//moved alertCheckboxButton release to (void)dealloc
[alert release];    

}


-(void)alertCheckboxButtonClicked{

if (![[NSUserDefaults standardUserDefaults] objectForKey:@"disclaimer"]){

    [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"disclaimer"];
    alertCheckboxButton.selected = YES;
}else {

    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"disclaimer"];
    alertCheckboxButton.selected = NO;
    }

}

3 ответа

Если вы хотите сделать эту кнопку переключателем, присвойте ей метку, затем в ее функции события проверьте наличие метки на 0, затем установите ее на 1, а также установите BOOL там. Когда вы добавляете его для оповещения, тогда проверьте значение BOOL, если это правда, измените изображение кнопки и отметьте также.

ДУХ! Мой код работает. Просто пришлось удалить: in @selector(alertCheckboxButtonClicked:)

Разве это не всегда что-то простое?

Я думаю, что вы просто хотите переключить свойство "selected" UIControl. Когда "selected" - это YES, это когда изображение для UIControlStateSelected будет использоваться...

Типичным для iOS эквивалентом флажка является UISwitch со свойством on.

Другие вопросы по тегам