4

18 個の UIButton で構成される UITextField 用のカスタム キーボードを作成しました。テキストフィールドのinputViewとして設定されるUIViewです。

ボタンは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ます。少なくとも 1 つのボタンが有効になっている間、背景は完全に引き伸ばされます。すべてのボタンが無効になっており、UITextfieldresignsFirstResponderと UITextField が再び First Responder になると、ボタンは表示されますが、背景画像は伸びないように見えます (少なくとも垂直方向ではなく、水平方向には問題ないようです)。

どこから解決策を探し始めればよいのかよくわかりません。私の推測では、それはカスタム キーボードがサブビューを描画する方法にあると思いますが、よくわかりません。

で背景画像を設定することでこれを修正できますlayoutSubviewsか、またはdrawRect:そのようなものはありますか? 水平方向のストレッチが正常に機能するという事実は、UIButton のフレームが描画されているときに正しくないかどうか疑問に思います。

編集 左端のセルは単なるラベルであり、右側の数字のあるセルは UITextfields であり、カスタムキーボードがあります

キーボードの外観: キーボードの外観

セル 3 でファーストレスポンダを辞任した後、キーボードが実際にどのように見えるか、次に 1 人のファーストレスポンダ (すべてのキーが無効) を与え、次に 4 つのファーストレスポンダを与えました。 セル 3 でファーストレスポンダーを辞任した後、キーボードが実際にどのように見えるか

4

2 に答える 2

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
于 2012-11-23T13:41:41.223 に答える
0

使用している背景画像のサイズは?

とにかくstretchableImageWithLeftCapWidth:topCapHeight:iOS 5以降廃止予定resizableImageWithCapInsets:です。代わりに使用してみてください。

于 2012-11-23T09:45:42.760 に答える