【问题标题】:Assign UIImages to UIButtons via Array通过数组将 UIImages 分配给 UIButtons
【发布时间】:2011-11-16 03:05:26
【问题描述】:

我有 10 个图像数组和 10 个按钮,我想要的只是将图像随机设置为按钮。

我试过了,但没有成功

int index = arc4random() % 10;

UIImage *img = [UIImage imageNamed:[arrayAnsewrImages objectAtIndex:index]];

[self.btnAnswerImage1 setBackgroundImage:[UIImage imageNamed:img] forState:UIControlStateNormal];

这里是方法的代码,m using:

[self.arrayQuestionImages addObject:@"bear.jpg"];
[self.arrayQuestionImages addObject:@"girraf.jpg"];
[self.arrayQuestionImages addObject:@"hippo.jpg"];
[self.arrayQuestionImages addObject:@"monkey.jpg"];
[self.arrayQuestionImages addObject:@"piglet.jpg"];
[self.arrayQuestionImages addObject:@"pumba.jpg"];
[self.arrayQuestionImages addObject:@"rabbit.jpg"];
[self.arrayQuestionImages addObject:@"simba.jpg"];
[self.arrayQuestionImages addObject:@"snake.jpg"];
[self.arrayQuestionImages addObject:@"tigger.jpg"];
[self.arrayQuestionImages addObject:@"turtle.jpg"];
int index = arc4random() % 10;

UIImage *img = [UIImage imageNamed:[arrayQuestionImages objectAtIndex:index]];


switch (index)
{   

    case 0:
    {   
        //[self.btnQuestionImage1 setBackgroundImage:[UIImage imageNamed:img] forState:UIControlStateNormal];
        [self.btnAnswerImage1 setImage:img forState:UIControlStateNormal];

    }
        break;
    case 1:
    {
        [self.btnQuestionImage2 setImage:img forState:UIControlStateNormal];    
    }               
        break;
    case 2:
    {
        [self.btnQuestionImage3 setImage:img forState:UIControlStateNormal];    

    }   
        break;
    case 3:
    {
        [self.btnQuestionImage4 setImage:img forState:UIControlStateNormal];

    }
        break;
    case 4:
    {
        [self.btnQuestionImage5 setImage:img forState:UIControlStateNormal];    

    }   
        break;  
    case 5:
    {
        [self.btnQuestionImage6 setImage:img forState:UIControlStateNormal];    

    }   
        break;  
    case 6:
    {
        [self.btnQuestionImage7 setImage:img forState:UIControlStateNormal];    

    }   
        break;  
    case 7:
    {
        [self.btnQuestionImage8 setImage:img forState:UIControlStateNormal];

    }   
        break;  
    case 8:
    {
        [self.btnQuestionImage9 setImage:img forState:UIControlStateNormal];    

    }   
        break;  
    case 9:
    {
        [self.btnQuestionImage10 setImage:img forState:UIControlStateNormal];   

    }   
        break;  



    default:
    {
        [self.btnQuestionImage1 setImage:img forState:UIControlStateNormal];

    }
        break;
} 
}

M 在我的每个按钮上都显示空白/无图像。请建议我任何选择。

【问题讨论】:

  • 没有成功怎么办?你从 arc4random() 函数中得到了什么
  • 在看到您的附加代码后对我的答案添加了新的编辑。

标签: objective-c ios4 uibutton uiimage nsmutablearray


【解决方案1】:

在你的代码中没有什么让我觉得 很奇怪,但有几件小事我要检查...

您对[UIImage imageNamed:] 的调用需要将字符串作为参数,但它显示(至少通过您的数组名称)您正在传递一个UIImage 对象。代码应为以下之一:

UIImage *img = [UIImage imageNamed:[arrayAnswerImageNames objectAtIndex:index]];  // Note "Names" array

或:

UIImage *img = (UIImage *)[arrayAnswerImages objectAtIndex:index];

取决于您要如何构建“图像”数组;带有图像或图像名称。另外,我假设您的按钮框架已设置,并且它们已添加到视图中?

希望你能把它整理好。


编辑

刚刚查看了您的附加代码。只是一个想法 - 你有没有初始化你的数组arrayQuestionImages?确保您调用类似于:

self.arrayQuestionImages = [NSMutableArray arrayWithCapacity:10];

在添加对象之前。

此外,以上面显示的方式使用 switch 语句看起来有点混淆。就个人而言,我会执行以下操作:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.questionImageNames = [NSArray arrayWithObjects:@"bear.jpg", @"girraf.jpg", @"hippo.jpg", @"monkey.jpg", @"piglet.jpg", @"pumba.jpg", @"rabbit.jpg", @"simba.jpg", @"snake.jpg", @"tigger.jpg", @"turtle.jpg", nil];


    NSMutableArray *buttonArray = [NSMutableArray arrayWithCapacity:10];

    for (int i = 0; i < NUM_BUTTONS; i++) {
        NSUInteger index = arc4random() % NUM_BUTTONS;

        UIButton *newButton = [UIButton buttonWithType:UIButtonTypeCustom];
        newButton.frame = CGRectMake(i * x, i * y, width, height);    // Whatever position and size you need...

        UIImage *buttonImage = [UIImage imageNamed:[self.questionImageNames objectAtIndex:index]];
        [newButton setBackgroundImage:buttonImage forState:UIControlStateNormal];

        [self.view addSubview:newButton];
        [buttonArray addObject:newButton];
    }

    self.myButtons = buttonArray;   // Where myButtons is a NSArray property of your class, to store references to the buttons.
}

【讨论】:

  • 感谢您的努力,但我的愚蠢是:我忘了初始化数组:D
【解决方案2】:

您需要将图像名称放入数组中。

您正在尝试将 uiimage 对象传递给 imagedNamed 构造函数

【讨论】:

    【解决方案3】:

    UIImage *img = [UIImage imageNamed:[arrayAnswerImageNames objectAtIndex:index]]; [self.btnAnswerImage1 setBackgroundImage:img forState:UIControlStateNormal];

    【讨论】:

    • 甚至 [self.btnAnswerImage1 setImage:img forState:UIControlStateNormal];
    猜你喜欢
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    相关资源
    最近更新 更多