2012-11-15 85 views
4

我爲UITextField製作了一個自定義鍵盤,由18個UIButtons組成。這是一個UIView,它被設置爲文本字段的inputView。iOS自定義鍵盤可伸縮圖像停止拉伸

按鈕被使用的代碼

UIImage* buttonImage =[[UIImage imageNamed:@"keyboard-button-background.png"] stretchableImageWithLeftCapWidth:1.0 topCapHeight:79.0]; 
UIImage* buttonPressedImage =[[UIImage imageNamed:@"keyboard-button-pressed-background.png"] stretchableImageWithLeftCapWidth:1.0 topCapHeight:79.0]; 

UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button setTitle:title forState:UIControlStateNormal]; 
[button setBackgroundImage:buttonImage forState:UIControlStateNormal]; 
[button setBackgroundImage:buttonPressedImage forState:UIControlStateHighlighted]; 

button.frame = CGRectMake(xPosition, yPosition, buttonWidth, buttonHeight); 

一旦按鈕被按下時,按鈕,然後設置爲enabled = NO在了UIView的initWithFrame:方法創建的。至少有一個按鈕處於啓用狀態時,背景可以完美展開。如果所有按鈕都被禁用,並且UITextfield然後UITextField再次成爲First Responder,則出現按鈕,但背景圖像不再可以伸展(至少不在垂直方向上,水平看起來很好)。

我不確定從哪裏開始尋找解決方案。我的猜測是自定義鍵盤繪製子視圖的方式,但我不確定。

難道這可以通過設置背景圖像在layoutSubviewsdrawRect:或類似的東西?橫向拉伸工作正常的事實使我懷疑UIButton的框架是否不正確,因爲它正在被繪製。

編輯 的最左邊細胞只是標籤,與數字UITextfields右側的細胞,具有自定義鍵盤

鍵盤應該是什麼樣子: How the keyboard should look

如何鍵盤實際上看起來在單元格3上一次退出第一響應者,然後給予第一響應者(所有鍵被禁用),然後給出4個第一響應者: How the keyboard actually looks once resigned first responder on cell 3, then gave 1 first responder (all keys disabled), then gave 4 first responder

+0

你可以加入一些截圖嗎?想象一下這應該是什麼樣子有點難。 – jrturton

+0

是啊掛在2分鐘 – Josh

+0

你在哪裏設置你的rects? – Luke

回答

2

爲了處理不同的iOS API,我爲 UIImage做了一個類別。

@implementation UIImage (SPResizableImage) 

- (UIImage *)spResizableImageWithCapInsets:(UIEdgeInsets)edge 
{ 
    UIImage * resizableImage = nil; 

    if ([self respondsToSelector:@selector(resizableImageWithCapInsets:)]) // iOS 5 
    { 
     resizableImage = [self resizableImageWithCapInsets:edge]; 
    } 
    else 
    { 
     resizableImage = [self stretchableImageWithLeftCapWidth:edge.left 
                topCapHeight:edge.top]; 
    } 

    return resizableImage; 
} 

@end 
+0

那好像工作!奇怪的是'stretchableImageWithLeftCapWidth:topCapHeight:'在某些情況下不起作用,但我們開始吧!謝謝您的幫助。 – Josh

0

您使用的背景圖像的大小是多少?

無論如何stretchableImageWithLeftCapWidth:topCapHeight:自iOS 5起被取消。 嘗試使用resizableImageWithCapInsets:來代替。

+0

圖像大小爲9 x 80,此特定鍵盤上的按鈕爲53 x 65。我有幾個不同的鍵盤佈局,但他們使用相同的圖像。有趣的是,水平伸展有效,但垂直似乎不起作用。 – Josh

+0

哦,我必須支持iOS 4,所以我需要使用'stretchableImage ...',如果有可能的話 – Josh

+0

我認爲問題在於最高限額。我有拉伸圖像類似的問題。 – DrAL3X