2013-02-08 54 views
0

我創建了一個繼承自UIButton的類。如果我向我的XIB添加四捨五入的按鈕並將它們的類屬性設置爲UIButton,它們將顯示爲圓角矩形按鈕(但不會調用我的自定義代碼,因此按鈕的行爲與普通按鈕相似,這不是我想)。如果我在IB中將這些按鈕的類屬性設置爲我的自定義類UIButtonCustom,它們在IB設計器中似乎仍然是圓角矩形按鈕,但是當我運行該應用程序時,這些按鈕是自定義類型的(這意味着它們在按鈕文本,因爲我沒有設置任何按鈕的背景圖像)。如何從Interface Builder中的圓角矩形UIButton繼承?

有什麼辦法讓這些按鈕看起來像應用程序實際運行時的圓形矩形按鈕?

+0

根據我的經驗,不,IB不能解釋您的設計決策(尤其是那些內置的代碼)並在運行之前渲染它們。 – 2013-02-08 16:26:55

+0

您不能在Interface Builder中使用您的子類。您必須以編程方式將它們添加到視圖中 – Luke 2013-02-08 17:07:45

+0

@Luke:您可以在IB中使用UIButton子類 - 我一直都在使用它。當我自定義按鈕(這是99%的時間)時,這工作正常,但如果我想要一個子類型的圓角矩形按鈕,顯然不起作用。 – MusiGenesis 2013-02-08 17:20:55

回答

1

您在xib上看到的圓角按鈕是UIButton的子類別,即UIRoundedRectButton
我不認爲你可以繼承它,因爲它沒有記錄(一個私人API)。

1

正如其他人在這裏指出的,你不能繼承UIRoundedRectButton。但是你可以通過在init方法中設置一些CALayer屬性來讓你的按鈕看起來像圓角矩形按鈕。

#import "MyCustomButton.h" 
#import <QuartzCore/QuartzCore.h> 

@implementation MyCustomButton 


- (id)initWithFrame:(CGRect)frame 
    //button created in code 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self initialise]; 
    } 
    return self; 
} 

- (id)initWithCoder:(NSCoder *)aDecoder; 
    //button created in Interface Builder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
      [self initialise]; 
    } 
    return self; 
} 

- (void)initialise; 
{ 
    self.layer.cornerRadius = 10.0f; 
    self.layer.borderWidth = 1.0f; 
    self.layer.borderColor = [[UIColor lightGrayColor] CGColor]; 
} 

@end 

如果你已經自動版式禁用您可以繼續使用「圓角的矩形」按鈕風格IB給你佈局正確的外觀,雖然風格將您的自定義按鈕加載時被忽略。如果啓用了自動佈局功能,則必須將IB樣式更改爲「自定義」,否則您會發現按鈕框架的行爲不符合您的期望。