在Objective-C中,我如何使这些代码高效


[self.menuBtn1 setImage:[UIImage imageNamed:@"menu1.png"] forState:UIControlStateNormal];
[self.menuBtn2 setImage:[UIImage imageNamed:@"menu2.png"] forState:UIControlStateNormal];
[self.menuBtn3 setImage:[UIImage imageNamed:@"menu3.png"] forState:UIControlStateNormal];
[self.menuBtn4 setImage:[UIImage imageNamed:@"menu4.png"] forState:UIControlStateNormal];
[self.menuBtn5 setImage:[UIImage imageNamed:@"menu5.png"] forState:UIControlStateNormal];
[self.menuBtn6 setImage:[UIImage imageNamed:@"menu6.png"] forState:UIControlStateNormal];
[self.menuBtn7 setImage:[UIImage imageNamed:@"menu7.png"] forState:UIControlStateNormal];

这段代码效率很低。但是我认为用for语法是很有效的。然而,我不知道如何用for编码self.menuBtn%d。在Objective-C中,我如何编写这个?

动态访问按钮属性,因此您不需要数组。这只适用于按钮已经初始化(他们是如果他们是IBOutlets)

NSString *imageName;
NSString *buttonName;
UIImage  *image;
for (int i = 1; i < 8; i++) {
    //@autoreleasepool {
    imageName  = [NSString stringWithFormat:@"menu%d", i];
    buttonName = [NSString stringWithFormat:@"menuBtn%d", i];
    image      = [UIImage imageNamed:imageName];
    UIButton *button = (UIButton *)[self valueForKey:buttonName];
    if (button)
        [button setImage:image forState:UIControlStateNormal];
    /*
     If you needed to scale this to say 1000 images, you can uncomment the first 
     and last line in the for-loop which will automatically release the variables
     each iteration so the memory consumption doesn't spike.
   */
   //}
}

一种解决方案可能是将所有按钮的标签设置为某个值(例如100 +按钮编号),然后尝试:

for (UIButton *aButton in self.view.subviews)
{
    if ((aButton.tag >= 100 and aButton.tag < 107))
        [aButton setImage:[UIImage imageNamed:[NSString stringWithFormat:@"menu%d.png",aButton.tag]] forState:UIControlStateNormal];
}

首先将按钮添加到数组并使用for循环,如下所示:

NSArray *array=[NSArray arrayWithObjects:menuBtn1,menuBtn2,menuBtn3,menuBtn4,menuBtn5,menuBtn6menuBtn7,nil];
int i=1;
for(UIButton *aButton in array){
    [aButton setImage:[UIImage imageNamed:[NSString stringWithFormat:@"menu%d.png",i++]] forState:UIControlStateNormal];
}
NSString *menubutton;
NSMutableArray *imagearray  = [[NSMutableArray alloc]initWithObjects:@"image1.png",@"image2.png",@"image3.png", nil];
for(int i=0; i<[imagearray count]; i++)
{
    menubutton = [NSString stringWithFormat:@"menuBtn%d",i];
    UIButton *button = (UIButton *)[self valueForKey:menubutton];
    [button setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@",[imagearray objectAtIndex:i]]] forState:UIControlStateNormal];
}

最新更新