2011-04-14 96 views
7

所以我试图嵌入一个切换(是一个单词?)在UIAlertView中,“不要再显示这个”按钮,但我遇到了一些麻烦,我可以似乎没有得到解决。如何在UIAlertView中创建一个自定义的UIButton

这是迄今为止我不工作的代码...

编辑:我添加的按钮的方法,并提出在原来代码中的一些变化。现在我得到按钮来对新闻作出反应,但结果是崩溃。任何帮助?

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; 
    } 

} 

回答

1

如果你想使这个按钮,拨动然后将标签分配到该按钮,然后在其事件功能检查代码是否为0,那么将它设置为1,并且还设置有BOOL。当你将它添加到警报中时,如果是true,检查BOOL值是否改变你的按钮图像和标签。

+0

如何更改按钮的状态?在我的代码中,如果我点击它,没有任何反应,即我没有看到不同的PNG,我只是看到相同的控制状态正常的图像。我知道如何使用IB来做到这一点,但我不知道如何以编程方式更改按钮状态。 – Sam 2011-04-15 19:22:13

0

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

复选框的典型iOS等价物是UISwitch,它具有“on”属性。

+0

请允许我问,是否有更好的方式在启动时显示免责声明,理想情况下不会再显示? (直到更新或重新安装或甚至像这样,我猜测会擦除userdefaults)是一个更接受的方式来执行操作表或其他功能吗?我是否浪费了大量时间试图弄清楚这个按钮的事情,只是为了让最终看起来有些不自然,而我的所有用户都说“Ida就是这样做的......”? – Sam 2011-04-17 01:20:36

1

DUH!我的代码有效。只需要删除:in @selector(alertCheckboxButtonClicked :)

难道这不总是简单吗?

相关问题