我在屏幕顶部创建了3个UIbuttons
。点击每个按钮后,我在下面的每个按钮上都有5个按钮,背景图像不同。下面是我的第一个按钮(位于顶部)的代码,我在视图控制器中获得了5个图像。
-(IBAction) btnforimages1click:(id)sender {
for (int a=0; a<5 ; a++) {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
{
buttonsforbundle1 = [[UIButton alloc]initWithFrame:CGRectMake(100*a,300 ,100 ,90 )];
[buttonsforbundle1 addTarget:self action:@selector(btn4images1:) forControlEvents:UIControlEventTouchUpInside];
buttonsforbundle1.tag = a;
[buttonsforbundle1 setBackgroundImage:[UIImage imageNamed:[bundle1 objectAtIndex:a]] forState:UIControlStateNormal];
[self.view addSubview:buttonsforbundle1];
}
}
我也对其他两个按钮做同样的事情。现在我想要的是,当我点击我的前三个按钮
时请建议我如何解决这个问题。
答案 0 :(得分:0)
您至少有三个选择:
1)按标签访问UI元素:
如果您可以设法在btnforimages1点击中发出唯一标记号,btnforimages2click,btnforimages3点击其他5个添加的UIButtons,那么您可以访问它们:
UIButton *button = (UIButton *)[self.view viewWithTag:99];
[button removeFromSuperview];
2)继续参考创建的按钮:
// in view.h
NSMutableArray *my_created_buttons;
...
// in view init
[[my_created_buttons alloc] init];
...
-(IBAction) btnforimages1click:(id)sender {
for (UIButton *b in my_created_buttons {
[b removeFromSuperview];
}
if([my_created_buttons count]) {
[my_created_buttons removeAllObjects];
}
... let buttonsforbundle1 local variable since we store current 5 button set in array
UIButton *buttonsforbundle1;
... in your for loop add this after creating and adding to view
[my_created_buttons addObject:buttonsforbundle1];
}
您可以进一步重构这些代码,例如。通过对其他方法进行可变阵列管理。
3)将其保存在Interface Builder
中我认为这是最简单的选择,在Interface Builder中创建5个UIButton并为它们提供5个IBOutlet。然后在你的btnforimages1点击你可以例如:
-(IBAction) btnforimages1click:(id)sender {
self.IBbutton1 setBackgroundImage[UIImage imageNamed:[bundle1 objectAtIndex:0]] forState:UIControlStateNormal];
self.IBbutton2 setBackgroundImage[UIImage imageNamed:[bundle1 objectAtIndex:1]] forState:UIControlStateNormal];
self.IBbutton3 setBackgroundImage[UIImage imageNamed:[bundle1 objectAtIndex:2]] forState:UIControlStateNormal];
self.IBbutton4 setBackgroundImage[UIImage imageNamed:[bundle1 objectAtIndex:3]] forState:UIControlStateNormal];
self.IBbutton5 setBackgroundImage[UIImage imageNamed:[bundle1 objectAtIndex:4]] forState:UIControlStateNormal];
}
所以你不要隐藏它们,只需改变背景图像。此外,您不必处理不同的touchUpInside事件,只使用一种方法,并且在一次单击方法中,您可以通过检查其标记来区分不同的单击UIButton(另外,您必须使用变量来检查哪个点击了3个顶级UIButton。