如何在UIAlertView中创建自定义UIButton

7

我正在尝试在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个回答

1
如果您想将此按钮设置为切换按钮,则需要为该按钮分配一个标签,然后在其事件函数中检查该标签是否为0,如果是,则将其设置为1,并设置一个BOOL值。当您将其添加到警报中时,请检查BOOL值是否为真,如果是,则更改按钮图像和标签。

我该如何改变按钮的状态?在我的代码中,如果我点击它,什么也不会发生,即我看不到不同的png图像,只能看到相同的controlstatenormal图像。我知道如何使用IB来做到这一点,但我不知道如何通过编程方式更改按钮状态。 - Sam

1

天啊!我的代码终于可以工作了。只需要在@selector(alertCheckboxButtonClicked:)中删除冒号就好了。

总是有些简单的问题会让人头疼呢。


0

我认为你只是想切换UIControl的"selected"属性。当"selected"属性为YES时,将使用UIControlStateSelected的图像...

iOS中典型的复选框等效物是UISwitch,具有其"on"属性。


让我问一下,是否有更好的方法在启动时显示免责声明,并理想情况下不会再次显示?(直到更新或重新安装或某些情况发生,我猜这会清除用户默认设置)使用操作表或其他功能是更受认可的方法吗?我是不是在浪费很多时间来弄清楚这个按钮的事情,最终看起来很傻,而我的所有用户都会说“我本来就应该这样做…”? - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接