我为UITextField制作了一个自定义键盘,由18个UIButtons组成。这是一个UIView,它被设置为文本字段的inputView。
按钮是使用代码
在UIView的initWithFrame:
方法中创建的
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
。当至少启用其中一个按钮时,背景会完美展开。如果所有按钮都被禁用,并且UITextfield resignsFirstResponder
然后UITextField再次成为First Responder,则会出现按钮,但背景图像似乎不再拉伸(至少不在垂直方向,水平似乎很好)。
我不确定从哪里开始寻找解决方案。我的猜测是自定义键盘绘制子视图的方式,但我不确定。
可以通过在layoutSubviews
或drawRect:
或类似的设置中设置背景图片来解决此问题吗?水平拉伸工作正常的事实让我想知道UIButton的框架是否正确,因为它正在绘制。
修改 最左边的单元格只是标签,右边的单元格是UITextfields并且有自定义键盘
键盘的外观如何:
键盘实际看起来如何在单元格3上重新响应第一响应者,然后给出1个第一响应者(禁用所有键),然后给出4个第一响应者:
答案 0 :(得分: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
答案 1 :(得分:0)
您正在使用的背景图片的大小是多少?
无论如何,{iOS从iOS 5开始stretchableImageWithLeftCapWidth:topCapHeight:
被删除了。
请尝试使用resizableImageWithCapInsets:
。