2011-06-27 77 views
0

我有一個UIButton子類,因爲我初始化:子類UIButton的背景顏色?

MyButton *button = [MyButton buttonWithType:UIButtonTypeCustom]; 

我想設置這個按鈕的背景顏色。

如果我在視圖控制器下面的創建按鈕後:

MyButton.backgroundColor = [UIColor ...]; 

它工作正常。但是,如果我嘗試做UIButton子類中的以下,無論是在initWithFrameDrawRect:

self.backgroundColor = [UIColor ...]; 

它根本什麼都不做。該按鈕保持透明。

問題是,我的邏輯是這樣的,我真的需要在UIButton子類中設置顏色,而不是在調用代碼中。

任何想法?

+0

在drawRect中,你叫[super drawRect]?如果不嘗試調用它,然後做其他事情。 – karim

+0

可能的重複http://stackoverflow.com/questions/372731/how-can-i-set-a-button-background-color-on-iphone –

+0

是的,我總是[super drawRect]。正如我所說,沒有背景顏色。 –

回答

0

你可以在你的子類中實現「Buttonwithtype」方法,並在那裏寫代碼self.backgroundColor = [UIColor WhateverColor];

它應該工作。讓我知道。

+0

是的,它的工作,謝謝。 (我無法實現buttonWithType,因爲我需要顏色 - 使用屬性會太晚 - 所以我實現了buttonWithType:andBackgroundColor:並調用了[super buttonWithType]。我仍然想知道直接解決方案有什麼問題。 –

+0

太棒了。可能是因爲你寫的那個方法沒有調用?如果這個幫助,那麼你可以把它標記爲答案?我是新的stackoverflow,所以我得到一些學分:)謝謝 – Deeps

1

UIButton不意味着被分類。這是一個類集羣,你幾乎肯定會弄錯它(現在或將來可能會中斷)。基本方法buttonWithType:也永遠不會返回您的類的實例,因此您需要竭盡全力使所有代碼都能正常工作。

更好的方法是使一個工廠的方法,使用UIButton.buttonWithType:和配置按鈕的方式,你需要它。

+0

我們怎麼能知道?是否有任何蘋果資源可以解釋哪些UI元素可以被分類,哪些不是? – berliner

+0

因爲在UIButton上沒有真正記錄的init方法。不過,我們確實需要調用init。最重要的屬性是buttonType,它是隻讀的,即它必須在創建時設置。按鈕的行爲在很大程度上取決於它。設置它的唯一方法是使用工廠方法'+ buttonWithType:'實例化一個新按鈕。你不能保證得到一個工作按鈕--UIButton可能是一個有點抽象的類,並且沒有辦法找出答案。當前的子類顯然工作正常(作爲「自定義」按鈕)就好了,但它*可能*在心跳中斷。 – Eiko