2012-02-15 38 views
1

我想要做的是,当我点击按钮,一旦它应该被突出显示(我加载图像显示突出显示的效果),当我点击按钮再次(第二次)它应该删除突出显示的图像并添加一个正常的图像。它还应该添加元素并将其移除到Mutable Array。如何检测按钮点击 - 提供的逻辑错误代码

但是,发生的是,当我点击(一次或几次)它只添加图像,并没有删除任何。帮助

代码 我正在添加一个按钮; 的低于2线被放置在viewDidLoad方法

UIButton *but= [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    // then i set the size etc, and do the following 

     [but addTarget:self action:@selector(butclick:) forControlEvents:UIControlEventTouchUpInside]; 

    -(void)butclick:(id)sender{ 

     if([sender isSelected]==NO) { 
      [sender setBackgroundImage:[UIImage imageNamed:@"highlighted.png"] forState:UIControlStateNormal]; 
      [sender setSelected:YES]; 

      [self.mutArry addObject:[sender titleForState:UIControlStateSelected]]; 

     } else { 
      [sender setBackgroundImage:[UIImage imageNamed:@"nothighlighter.png"] forState:UIControlStateNormal]; 
      [sender setSelected:NO]; 
      [self.mutArry removeObject:[sender titleForState:UIControlStateSelected]]; 

     } 

} 
+0

你的意思是“它只添加图像,并没有删除任何”? – sch 2012-02-15 00:42:20

+0

当我第二次点击按钮时,它仍然处于高亮显示状态(如Highlight.png中)并且不执行else块。 – Illep 2012-02-15 00:57:39

回答

0

ü可能希望使用BOOL(如标志)用它代替使用高亮想法。

每次按键都会切换,并根据其值执行您的操作,它会一直添加一个值并在下次按下时删除一个值。第一个是根据该标志的初始值是什么。

if (flag) 
    { 
    //add your object and set to highlight 
     flag = NO; 
    }else 
    { 
     flag = yes; 
     //remove object and set to not highlighted 
    } 

设置标志时,当它被发现真实的没有,并且是当它被发现的假。保证了它会不断地改变

+0

您能否给我示例一个例子? – Illep 2012-02-15 00:56:17

+0

我更新了我的博文,并带有代码的想法。我的意思是要突出显示是要改变你的形象。 – 2012-02-15 01:07:00

+0

Ehab建议您在头部创建一个BOOL(boolean)变量,以便您可以确定该按钮何时已加载图像或否。所以基本的逻辑就是,在你的按钮方法中,你可以用IF语句添加BOOL。如果BOOL为YES,请执行以下操作:附加图像,然后将BOOL设置为“NO”,以便下次按下该按钮时,它将检测到BOOL为NO,因此执行不同的操作,它将删除图像并将BOOL重新设置为YES) – 2012-02-15 07:26:28

0

具有以下属性定义,并在该类

BOOL selected; 
在viewDidLoad中

合成,设定是假

self.selected = NO; 

现在做到以下几点:

-(void)butclick:(id)sender{ 

    if(!self.selected) { 
     [sender setBackgroundImage:[UIImage imageNamed:@"highlighted.png"] forState:UIControlStateNormal]; 
     self.selected = YES; 

     [self.mutArry addObject:[sender titleForState:UIControlStateSelected]]; 

    } else { 
     [sender setBackgroundImage:[UIImage imageNamed:@"nothighlighter.png"] forState:UIControlStateNormal]; 
     self.selected = NO; 
     [self.mutArry removeObject:[sender titleForState:UIControlStateSelected]]; 

    } 

}