我已經提出了關於子類化UIButton
的堆棧溢出的幾個問題,並且有幾個人告訴我,我不應該子類化UIButton
。爲什麼我不應該繼承UIButton?
子類別UIButton
的負面影響是什麼?而且我知道它很模糊,但是對UIButton
進行子類化還有什麼其他的選擇?
我已經提出了關於子類化UIButton
的堆棧溢出的幾個問題,並且有幾個人告訴我,我不應該子類化UIButton
。爲什麼我不應該繼承UIButton?
子類別UIButton
的負面影響是什麼?而且我知道它很模糊,但是對UIButton
進行子類化還有什麼其他的選擇?
Cocoa框架採取的方法是對象組合模式比傳統的類層次結構更合適。
通常,這意味着UIButton中可能有一個屬性,您可以在其中設置另一個對象來處理按鈕的各個方面。這是「定製」按鈕工作方式的首選方式。
這種模式的主要原因之一是許多庫組件創建按鈕,並不知道你希望它們創建你的子類的實例。
我注意到上面大約節省了時間,當你在你的應用程序在多個按鈕相同的按鈕配置您的評論。這是使用Factory Method設計模式的好時機,在Objective-C中,您可以使用implement it with a Category,因此它可以直接在UIButton上使用。
@interface UIButton (MyCompanyFactory)
+(UIButton *) buttonWithMyCompanyStyles;
@end
@implementation UIButton
+(UIButton *) buttonWithMyCompanyStyles {
UIButton *theButton = [UIButton buttonWithType:UIButtonTypeCustom];
// [theButton set...
return theButton;
}
@end
這是因爲UIButton
是那種特別有幾個複雜/微妙之處/限制(即額外的覆蓋,爲您定義,尤其是+buttonWithType:
),以便它能夠按預期工作所需。它比通常的-initWithFrame:
(和-initWithCoder:
,如果在XIB中使用)更多。 IDK爲什麼框架作者允許這些細節泄漏到我們的域中,但現在我們必須處理這些細節。限制是您的實現不能依賴於(即擴展)預設的系統按鈕樣式;您必須假設UIButtonTypeCustom
作爲UIButton
子類的起點。
如果你只是尋找一些更輕巧的用自己的「子視圖」你應該改爲繼承UIControl。 UIButton的子類UIControl,可以處理事件,如:
[mySubclassedButtonFromUIControl addTarget:self action:@selector(_doSomething:) forControlEvents:UIControlEventTouchUpInside];
UIControl子類UIView的,所以你可以清晰地layoutSubviews對您的UIControl子類包含的任何意見,並避免隨之而來的UIButton不必要的視圖。實質上,你只是創建你自己的'UIButton',但你可以避免必須解決你並不真正需要或不需要的行爲和功能。
子類化UIButton的原因是什麼?指定按鈕類型「自定義」。還需要什麼? –
我在問更多是否我想在未來繼承,爲什麼我不應該這樣做。但現在我的應用程序中會有大約20個按鈕,它們在文本週圍具有相同的背景,字體和填充大小等等。所以我想通過子類化將相同的時間和代碼相同。 – KKendall
沒有理由不能繼承UIButton。實際上,我這樣做是爲了能夠使用IB來定義我的按鈕的外觀。爲什麼?設計靈活性。 許多人已經分類UIButton。我已經分類了UIButton。這種認爲它不能被重複但缺乏證據的東西。 –