2014-05-16 49 views
1

的我有陣:非常基本的使用self.view.backgroundcolor

self.colors = @[@"redColor", 
        @"blueColor", 
        ]; 

然後功能:

self.view.backgroundColor = [UIColor [[self.colors[1] ] ]; 

當我把:

self.view.backgroundColor = [UIColor redColor]; 

將立即生效。這不起作用「預期標識符」 我不能在backgroundcolor方法中使用變量嗎?

回答

0

redColorblueColor來自UIColor類中的方法,返回一個UIColor*

UIColor類沒有方法接收表示顏色的字符串,並返回UIColor*

如果你想要的工作,你所描述的方式,形成UIColors而不是字符串數組:

self.colors = @[[UIColor redColor], 
       [UIColor blueColor] 
       ]; 
1

您正在存儲字符串到您的數組中。如果你想存儲的顏色對象的代碼更改爲以下:

self.colors = @[[UIColor redColor], 
    [UIColor blueColor], 
]; 

然後你就可以做

self.view.backgroundColor = self.colors[1]; 
+0

或者,如果你真的想有一個字符串,你可以做數組'[UIColor performSelector:NSSelectorFromString(@「redColor」)]' – kaman

+0

是的,總是有performSelector :)但是當名稱不是來自一種內置顏色時會發生什麼? – sha

+0

那麼總是有'if([UIColor respondsToSelector:...]):) – kaman

0

我想你誤會了從self.colors[1]返回什麼有幾個方法,你可以做到這一點,我將從你已有的代碼開始。

因此,我們有:

// Our array of colors as strings 
self.colors = @[@"redColor", @"blueColor", etc]; 

// Because our colors are strings we need to use NSSelectorFromString to convert 
// the string to a selector 
SEL colorSelector = NSSelectorFromString(self.colors[1]); 
// Then we need to check if colorSelector actually responds to UIColor 
if([UIColor respondsToSelector:colorSelector]) { 
    // If the if statement is true then we are good to set the color with it 
    self.view.backgroundColor = [UIColor performSelector:colorSelector]; 
} 

或者像別人已經說過的,並且可能會更好,你可以做

self.colors = @[[UIColor redColor], [UIColor blueColor]]; 

self.view.backgroundColor = self.colors[1];