我为 UITextField 制作了一个自定义键盘,由 18 个 UIButtons 组成。它是一个 UIView,它被设置为文本字段的 inputView。
按钮是在initWithFrame:
UIView 的方法中使用代码创建的
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
。至少启用一个按钮时,背景会完美拉伸。如果所有按钮都被禁用,并且 UITextfieldresignsFirstResponder
然后 UITextField 再次成为 First Responder,则按钮会出现,但背景图像似乎不再拉伸(至少不是垂直方向,水平方向似乎很好)。
我不确定从哪里开始寻找解决方案。我的猜测是自定义键盘绘制子视图的方式,但我不确定。
这可以通过设置背景图像或类似的东西来解决layoutSubviews
吗drawRect:
?水平拉伸效果很好的事实让我想知道 UIButton 的框架是否在绘制时不正确。
编辑 最左边的单元格只是标签,右边带有数字的单元格是 UITextfields 并具有自定义键盘
键盘的外观:
一旦在单元格 3 上辞职了第一响应者,然后给了 1 个第一响应者(所有键被禁用),然后给了 4 个第一响应者,键盘的实际外观如何: