2012-11-15 3 views
4

J'ai créé un clavier personnalisé pour un UITextField, composé de 18 UIButtons. C'est un UIView qui est défini comme inputView du champ de texte.L'image extensible du clavier personnalisé iOS cesse de s'étirer

Les boutons sont créés dans la méthode initWithFrame: du UIView en utilisant le code

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); 

Une fois que le bouton a été enfoncé, ce bouton est alors défini comme enabled = NO. L'arrière-plan s'étire parfaitement pendant qu'au moins l'un des boutons est activé. Si tous les boutons sont désactivés et que le champ UITextfield resignsFirstResponder puis l'UITextField devient Premier répondant, les boutons apparaissent mais l'image d'arrière-plan ne semble plus s'étirer (du moins dans le sens vertical, l'horizontale semble correcte).

Je ne sais pas vraiment par où commencer à chercher la solution. Je suppose que c'est dans la façon dont le clavier personnalisé dessine les sous-vues, mais je ne suis pas sûr.

Est-ce que cela peut être résolu en réglant l'image d'arrière-plan en layoutSubviews, ou drawRect: ou quelque chose comme ça? Le fait que l'étirement horizontal fonctionne bien me fait me demander si le cadre de l'UIButton n'est pas correct pendant qu'il est dessiné.

EDIT Les cellules à l'extrême gauche ne sont que des étiquettes, les cellules à droite avec des chiffres sont UITextFields et ont le clavier personnalisé

Comment le clavier devrait ressembler à: How the keyboard should look

Comment clavier ressemble réellement une fois démissionné premier répondeur sur la cellule 3, puis a donné 1 premier répondeur (toutes les touches désactivées), puis a donné 4 premiers répondeurs: 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

Pouvez-vous inclure des captures d'écran? C'est un peu difficile d'imaginer à quoi cela ressemble. – jrturton

+0

ouais accrocher 2 minutes – Josh

+0

Où établissez-vous vos rects? – Luke

Répondre

2

Pour gérer différentes API iOS, j'ai créé une catégorie pour 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

Eh bien cela semble fonctionner! Il est étrange que 'stretchableImageWithLeftCapWidth: topCapHeight:' ne fonctionne pas tout à fait dans certains cas, mais c'est parti! Merci pour l'aide. – Josh

0

Quelle est la taille de l'image d'arrière-plan que vous utilisez?

De toute façon, stretchableImageWithLeftCapWidth:topCapHeight: est supprimé depuis iOS 5. Essayez à la place d'utiliser resizableImageWithCapInsets:.

+0

La taille de l'image est '9 x 80' et les boutons sur ce clavier particulier sont' 53 x 65'. J'ai quelques dispositions de clavier différentes mais elles utilisent la même image. La chose amusante est, l'étirement horizontal fonctionne, mais la verticale semble ne pas fonctionner. – Josh

+0

Oh et je dois supporter iOS 4 donc j'ai besoin d'utiliser 'stretchableImage ...' si possible – Josh

+0

Je pense que le problème est sur la valeur de la limite supérieure. J'ai eu un problème similaire avec des images étirées. – DrAL3X

Questions connexes