2012-11-15 46 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