ios - event - xcode button action




帶有IB_DESIGNABLE的UIButton會拋出運行時屬性警告,並且不會在Interface Builder中呈現 (5)

嘗試將spacingBetweenLabelAndImageCGFloat ”聲明spacingBetweenLabelAndImage為“ NSNumber ”。

據我所知, 你不能在C型變量上調用“ setValue:

將“ spacingBetwenLabelAndImage ”的聲明更改為NSNumber也需要您更改一些代碼:

CGFloat halfSpacing = self.spacingBetweenLabelAndImage == 0 ? 0 : self.spacingBetweenLabelAndImage / 2;

可能會成為:

CGFloat halfSpacing = (self.spacingBetweenLabelAndImage ? ([self.spacingBetweenLabelAndImage floatValue] / 2) : 0.0);

(我不是100%肯定,如果這是第一行的完美翻譯,但我想展示如何從NSNumber中獲取floatValue)

我正在運行Xcode 6.1並且我已經在IBInspectable中使用IB_DESIGNABLE用於很多項目,但突然之間它就不再起作用了。 我創建了子類按鈕,將圖像和標題垂直居中放置,使用戶可以通過IBI使用IBInspectable設置邊框寬度和顏色。

將記錄以下警告,並且我無法在drawRect中預覽我的代碼:

warning: IB Designables: Ignoring user defined runtime attribute for key path "spacingBetweenLabelAndImage" on instance of "UIButton". Hit an exception when attempting to set its value: [<UIButton 0x7f9278591260> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key spacingBetweenLabelAndImage.

仍然,運行時它渲染像我打算渲染它,它也尊重我通過IB添加的相同自定義間距。

這是重新排列按鈕和標題的menubutton的代碼:

#import "HamburgerButton.h"

IB_DESIGNABLE
@interface HamburgerImageButton : HamburgerButton

@property IBInspectable CGFloat spacingBetweenLabelAndImage;

@end

執行:

#import "HamburgerImageButton.h"

@implementation HamburgerImageButton

- (void)drawRect:(CGRect)rect {
    [super drawRect:rect];

    CGSize imageSize = self.imageView.frame.size;
    CGSize titleSize = self.titleLabel.frame.size;

    // Move the label left and the image right by half the width
    CGFloat leftInset = titleSize.width / 2;
    CGFloat rightInset = imageSize.width / 2;

    CGFloat halfSpacing = self.spacingBetweenLabelAndImage == 0 ? 0 : self.spacingBetweenLabelAndImage / 2;

    CGFloat topInset = imageSize.height / 2 + halfSpacing;
    CGFloat bottomInset = titleSize.height / 2 + halfSpacing;

    UIEdgeInsets imageInsets = UIEdgeInsetsMake(-bottomInset, leftInset, bottomInset, -leftInset);
    UIEdgeInsets titleInsets = UIEdgeInsetsMake(topInset, -rightInset, -topInset, rightInset);
    self.imageEdgeInsets = imageInsets;
    self.titleEdgeInsets = titleInsets;
}

@end

您可能已經註意到它繼承了HamburgerButton。 這個基本的漢堡包按鈕沒有圖像,只繪製按鈕周圍的邊框。 這個基本的漢堡包按鈕有完全相同的問題:它不會在IB中的drawRect中繪製它的邊框,並且它具有相同類型的錯誤。 為了完整起見,這是代碼:

#import <UIKit/UIKit.h>

IB_DESIGNABLE
@interface HamburgerButton : UIButton

@property IBInspectable CGFloat borderWidth;
@property IBInspectable UIColor *borderColor;

@end

執行:

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

@implementation HamburgerButton

- (void)copyInspectables {
    self.layer.borderWidth = self.borderWidth;
    self.layer.borderColor = self.borderColor.CGColor;
}

- (void)drawRect:(CGRect)rect {
    [self copyInspectables];
}

@end

我真的不明白為什麼它只是拋出警告而沒有別的。 我並沒有真正改變我的所作所為。 我已經檢查了故事板,它是iOS 7及更高版本,意味著可以在Xcode 6(最新版本)中運行。

它抱怨無法在UIButton上找到這個值,這有點奇怪,因為我已將其子類化了。

更新:所以我改變了一切,並且它有效。 現在它再次扯掉,沒有改變任何其他東西。 我認為Xcode 6.1中存在一個錯誤......:/


如果您確定自己設置了所有設置器,並且在項目中導入了其他一些SDK並且遇到此問題,請在Target - General中選中“Linked Frameworks and Libraries”。

在我正確鏈接了一些SDK框架之後,錯誤就消失了。


我使用了Departamento B提供的方法,但它並沒有真正起作用。 但是,我修復了我的問題1.從故事板中選擇有缺陷的視圖2.單擊(編輯器 - 調試選定視圖)希望這會有所幫助


我個人如何解決這個問題:

在用戶定義的運行時屬性的身份檢查器中,我注意到我有一個舊的IB_Inspectable元素,我已從我的代碼中刪除,但它仍然在那裡。 用 - 按鈕刪除它擺脫了這個錯誤。


當有兩個目標時,我有這個錯誤。 一個是我的主項目,另一個是目標,我持有可設計的類(為了更快的構建)。
問題是在故事板中缺少一個模塊。





xcode6