2011-12-21 66 views
8

因此,我試圖改變UIButton上的UILabel而不是FXLabel的實例。查看更多關於FXLabelhttps://github.com/nicklockwood/FXLabel)的鏈接。我知道通過使用類擴展(Subclass UIButton to add a property),我總是可以添加另一個屬性,在我的情況下,只需添加一個子視圖基本上FXLabel。但是,我喜歡titleLabel財產的便利和功能。我可以*用FXLabel替換UIButton上的UILabel嗎?

是否有某種方法通過子類或類別將UILabel「切換」爲FXLabel

我知道我可以做到這一點,但它是如此黑客,並不是未來的證明。而且我不知道如何改變班級類型(Get UILabel out of UIButton)。

UILabel *label; 
for (NSObject *view in button.subviews) { 
    if ([view isKindOfClass:[UILabel class]]) { 
     label = (UILabel *)view; 
     break; 
    } 
} 

的思考?謝謝。

回答

5

這是另一種方法,您至少可以訪問標籤。創建UIButton的子類,並在該子類中覆蓋layoutSubviews。從那裏你可以直接訪問標籤:

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    UILabel *titleLabel = [self titleLabel]; 
} 

現在我們仍然堅持將標籤更改爲子類的問題。我想你可以嘗試動態地將UILabel的課程與FXLabel子課程(詳細的here)交換,但說實話這很危險。

我想說你最好創建自己的UIControl,你可以自定義你的心中的內容。沒有風險,只是純粹的善良。模仿一個簡單的UIButton不應該太難。祝你好運!

+0

感謝您的提示。我想我會嘗試創建自己的自定義類。如果沒有其他人給我更好的答案,我會將其標記爲回答我的問題。謝謝! – 2011-12-21 08:05:32

+1

我只是黑了它,並在按鈕上添加了標籤,而沒有實際設置按鈕上的文字。現在我必須跟蹤alpha變化的兩個屬性,但是這比創建我自己的UIControl容易得多。我將來會研究它,看看我能得到什麼 – 2011-12-23 22:35:57

1

對不起,但我不認爲你可以用任何可靠的方式做到這一點。即使你使用UIButton,並且覆蓋了titleLabel方法,你也必須處理狀態設置。而且你永遠不知道什麼時候內部代碼直接指向標籤的私人ivar。

我爲我的應用程序創建了一個UIButton的子類,用於執行類似的操作(自定義按鈕佈局&子視圖),抱歉,我現在無法共享它,它由客戶擁有。爲您自己的子視圖創建自己的狀態處理代碼並不難。

+0

感謝您的幫助。我會看看我可以放在一起。 – 2011-12-21 08:05:53

相關問題