2012-03-13 84 views
0

我已經創建了一個出口收集幾個按鈕,現在我需要更改按鈕的背景,這裏是我的代碼,但編譯器給我一個錯誤:添加背景圖片直銷收藏

[outlet makeObjectsPerformSelector:@selector(setBackgroundImage:img forState:UIControlStateSelected)]; 

錯誤:

預期 ':'

我該怎麼解決呢?

編輯:

UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 100, 50)]; 
imgView.image = [UIImage imageNamed:@"mask.png"]; 
[outlet makeObjectsPerformSelector:@selector(setBackgroundImage:)withObject:imgView]; 
[imgView release]; 

回答

1

您不能在@selector(...)中放置參數。您需要使用makeObjectsPerformSelector:withObject:,例如你的代碼應該是東西

[EsOutlet makeObjectsPerformSelector:@selector(setBackgroundImage:) withObject:img]; 

我說東西喜歡,因爲我不認爲有一種方法爲選擇一個接收多於一個參數做到這一點。

+0

謝謝,但應用程序將崩潰!你會看到我編輯的代碼嗎? – 2012-03-13 16:31:53

+0

「UIButton」沒有'setBackgroundImage:'方法,只有'setBackgroundImage:forState:'。你正試圖調用一個不存在的方法。這就是爲什麼我在我的回答中說了一些事情。所以,你應該在這裏接受其他海報的建議,然後自己迭代對象。你也可以在類'UIButton'中添加一個'setBackgroundImage:'方法,但這更加先進。 – shawkinaw 2012-03-13 18:36:02

0

你不能有內@selector語句的參數。由於沒有makeObjectsPerformSelector需要NSArray中的兩個參數,因此您需要遍歷對象並自行調用setBackgroundImage:forState:方法。

E.g.

for (UIButton *b in outlet) { 
    [b setBackgroundImage:img forState:UIControlStateSelected]; 
} 
+0

請你看看我編輯的代碼? – 2012-03-13 17:34:11

+0

@ Mc.Lover:查看更新後的答案,如何正確執行。 – 2012-03-13 18:46:33

0

這是因爲您的選擇器語法不正確。您無法向@selector聲明提供參數。

既然你需要提供多個參數(圖像+控制狀態),你應該通過EsOutlet迭代,並執行操作:

for (UIControl *control in EsOutlet) 
{ 
    //perform action on control 
}