2012-12-14 59 views
0

我有點困惑。這不是一個破壞者,但我有興趣在一個體面的答案,如果有一個。繪製一個UIButton/UIBarButtonItem來使用父欄的tintColor?

我一直在使用UIButtonUIBarButtonItem(作爲酒吧按鈕項customView)內的自定義子視圖。我的自定義子視圖是而不是 a UILabel也不是UIImage,這就是爲什麼我正在做我在做的事情。這個UIBarButtonItem是我的導航欄上的一個項目,導航欄有一個tintColor集。我希望UIButton具有這種圓整的外觀UIBarButtonItemStyleBordered,這意味着它也應該採用其父欄的tintColor

當前的解決方案已經實現了從UIKit中爲UINavigationBarDefaultButton.png和家族提取png文件。這看起來很好如果我沒有設置tintColor屬性;相反,按鈕仍然是「iOS海軍藍」,當我想,比如說,明亮的橙色(不是我使用的顏色,但你得到我的漂移)。這使我陷入了兩難境地:做出UIButton外觀和行爲的最佳方式是什麼UIBarButtonItem風格,包括tintColor財產的影響?我可以在按鈕上設置自己的屬性。這沒什麼大不了的。

我想在CoreGraphics中畫出UIButton的背景嗎?那裏是否有一個框架/庫已經實現了這一點?如果我夢想着不可能的事,那就告訴我。我並不是那麼擅長CoreGraphics,但它絕對不在可能性範圍之外。

如果這不能做,我知道,我總是可以採取冷靜定製UIView我試圖欺騙並緊鄰其保存爲圖像(因此使用UIImage一個UIBarButtonItem內),但我我想看看這是否可能。

這就是我正在處理的(下面)。後退按鈕看起來很棒,但只是因爲我沒有搞亂它。我希望rightBarButtonItem能夠使用我設置的我的tintColor,但爲了使它具有UIBarButtonItemStyleBordered外觀,並且設置了customView,我不得不使用png文件作爲背景。以下是你所看到的,即使tintColor設置在UIBarButtonItem(因爲它使用的是png)。

uinavigationbar

+0

只需調用'[super tintColor]'。 – 2012-12-14 22:12:34

+0

'[super tintColor]'似乎不起作用;看我的修訂。 –

回答

1

我確實在Stack Overflow上找到了this question/answer,這讓我足夠接近,剩下的就是我。這是一個詳細的帖子,關於如何用UIColor色調UIImage;我已經把它拉出來了一個函數,我已經發布了這個right here的要點。

與此相結合,我已經在UIButton上定義了一個類別方法,它允許我創建一個帶有該背景圖像的按鈕,並將其填充到空的UIBarButtonItem中。

+ (id)buttonWithBarStyleAndTintColor:(UIColor *)tintColor customView:(UIView *)customView { 
    UIImage *defaultNormal = [UIImage imageNamed:@"UINavigationBarDefaultButton.png"]; 
    UIImage *defaultPressed = [UIImage imageNamed:@"UINavigationBarDefaultButtonPressed.png"]; 
    UIImage *back = [TintImageWithTintColor(defaultNormal, tintColor) 
        stretchableImageWithLeftCapWidth:5.0 
        topCapHeight:0.0]; 
    UIImage *pressed = [TintImageWithTintColor(defaultPressed, tintColor) 
         stretchableImageWithLeftCapWidth:5.0 
         topCapHeight:0.0]; 

    UIButton *button = [self buttonWithType:UIButtonTypeCustom]; 
    button.frame = CGRectMake(0, 0, 34.0f, 30.0f); 
    [button addSubview:customView]; 
    customView.userInteractionEnabled = NO; 
    customView.frame = CGRectCenterRectInRect(customView.frame, button.frame); 
    [button setBackgroundImage:back forState:UIControlStateNormal]; 
    [button setBackgroundImage:pressed forState:UIControlStateSelected]; 
    [button setBackgroundImage:pressed forState:UIControlStateHighlighted]; 
    return button; 
} 
0

你可以嘗試設置UIButton的類型來定製,並確保其色彩清晰,同樣爲您的自定義視圖,這樣,唯一可見的看法將是的UIBarButtonItem色調的顏色。

另外,如果您願意投資,有一個名爲PaintCode的工具可以爲您完成CoreGraphics的代碼。

+0

我可能會給PaintCode一個鏡頭,看起來很光滑。儘管如此,你的回答對我來說並沒有什麼幫助,因爲確保我的按鈕和自定義視圖具有清晰的背景,並且在我的'UIBarButtonItem'上設置色調顏色只是在工具欄上顯示我的自定義視圖(全球),而不是周圍的鉻。 –

相關問題