3
-(IBAction) changeColOnClick:(id)sender
{
    NSArray *colors = [NSArray arrayWithObjects:@"[UIColor brownColor]",@"[UIColor blackColor]",@"[UI greenColor]",@"[UIColor redColor]", nil];

    self.view.backgroundColor = [colors objectAtIndex:i];
    // ERROR::changebackground[1089:207] -[NSCFString CGColor]: unrecognized selector sent to instance 0x357c

    //label.text = [colors objectAtIndex:i]; //i is defined in the implementation
    i++;

    if(i==[colors count]-1)
    {
        i=0;
    }
}
4

6 に答える 6

2

文字列を配列に保存しているため、コードがクラッシュしています。次のように、実際の色を配列に保存してみてください。

NSArray *colors = [NSArray arrayWithObjects:[UIColor brownColor], [UIColor blackColor], [UIColor greenColor], [UIColor redColor], nil];

self.view.backgroundColor = [colors objectAtIndex:i];

それでもうまくいかない場合は、次のようなことが必要になる場合があります。

self.view.backgroundColor = ((UIColor *)[colors objectAtIndex:i]).CGColor;
于 2012-11-20T13:13:25.393 に答える
2

@"[UIColor brownColor]"arrayはありNSStringませんUIColor

したがってarray、次のようになります。

 NSArray *colors = [NSArray arrayWithObjects:[UIColor brownColor],[UIColor blackColor],[UI greenColor],[UIColor redColor], nil];

次のように単一のインスタンスを追加しますMutableArray

 [colors addObject:[UIColor blackColor]];

すぐ:

于 2012-11-20T13:14:30.243 に答える
2

このようにコードを変更します。それが動作します

-(IBAction) changeColOnClick:(id)sender
{
    NSArray *colors = [NSArray arrayWithObjects:[UIColor brownColor],[UIColor blackColor],[UI greenColor],[UIColor redColor], nil];

    self.view.backgroundColor = [colors objectAtIndex:i];
    //label.text = [colors objectAtIndex:i]; //i is defined in the implementation
    i++;

    if(i==[colors count]-1)
    {
        i=0;
    }
 }
于 2012-11-20T13:15:12.987 に答える
1

ちょっと仲間、私はあなたのコードをテストしているだけで、あなたはこのようにメソッドを設定しています:-

int i;
-(IBAction) changeColOnClick:(id)sender
{

    NSArray *colors = [NSArray arrayWithObjects:@"redColor",@"blackColor",@"greenColor",@"redColor", nil];


    NSString *str =[colors objectAtIndex:i];
    i++;
   //DARK_BACKGROUNDNavigation=str;

    SEL blackSel = NSSelectorFromString(str);
    UIColor* tColor = nil;
    if ([UIColor respondsToSelector: blackSel])
        tColor  = [UIColor performSelector:blackSel];
    [self.view setBackgroundColor:tColor];

    if(i==[colors count]-1){i=0;}
}

その作業幸せなコーディング:)

IT のデモをダウンロード

http://www.sendspace.com/file/9e68jx

于 2012-11-20T13:21:32.290 に答える
1

文字列オブジェクトのような配列に色を追加します。それは違うの。あなたはそのようにするべきです:

[colors addObject:[UIColor blackColor]];
[colors addObject:[UIColor redColor]];

等々

于 2012-11-20T13:12:42.853 に答える
1

配列内のオブジェクトを文字列として取得したため、配列が得られます。UIColor タイプのオブジェクトを取得する必要があります。  

    UIColor *color1 = [UIColor brownColor];
    UIColor *color2 = [UIColor blackColor];
    UIColor *color3 = [UIColor greenColor];
    UIColor *color4 = [UIColor redColor];
    NSArray *colors = [NSArray arrayWithObjects:color1,color2,color3,color4, nil];
    self.view.backgroundColor = [colors objectAtIndex:i];
于 2012-11-20T13:23:27.353 に答える