2009-07-11 7 views
1

Je suis nouveau à la programmation pour l'iPhone et je me demande: quelle est l'étendue des différents contrôles? Prenons le bouton comme exemple:Question sur extensiblity de Cocoa Touch Controls

  • Puis-je changer le graphique d'arrière-plan?
  • puis-je le faire grandir quand j'appuie dessus?
  • Puis-je changer la police?
  • Puis-je utiliser une police personnalisée?
  • Puis-je utiliser un bouton graphique à la place du texte?

Répondre

2

En général, oui à toutes vos questions. Vous pouvez sous-classer les différentes classes UI * qui composent les contrôles tactiles Cocoa comme toutes les autres classes, et ajouter votre propre fonctionnalité personnalisée dans les méthodes appropriées. La seule partie délicate consiste à déterminer où exactement votre code devrait aller. Regardons votre exemple UIButton, et voyons ce que vous voulez en faire.

image de fond

La classe UIButton a déjà une méthode setBackgroundImage:forState: qui vous permet de modifier les UIImage les écrans bouton quand il est dans l'un de plusieurs états, comme Normal, Highlighted, handicapés, et ainsi de suite.

Par exemple, pour changer l'image du bouton affiche sous la forme d'un fond normal "backgroundImage.png", qui est un fichier image dans le paquet de votre application:

//Presuming you have some UIButton *button: 
UIImage *bgImage = [UIImage imageNamed:@"backgroundImage.png"]; 
[button setBackgroundImage:bgImage forState:UIControlStateNormal];

croissance plus

Vous pouvez modifier la propriété frame du bouton (une propriété héritée de UIView) en ajoutant une méthode pour le faire dans le fichier contrôleur .m qui gère le bouton, puis en ajoutant cette méthode en tant qu'action pour un événement de contrôle sur le bouton.

Supposons que vous souhaitiez doubler la taille du bouton. Dans viewDidLoad: ou quelque part similaire, ajoutez le code suivant:

[button addTarget:self action:@selector(growButton) 
      forControlEvents:UIControlEventTouchDown];

Ensuite, créez une méthode growButton avec le code suivant:

- (void)growButton { 
    CGRect currentFrame = button.frame; 
    CGRect newFrame = CGRectMake(currentFrame.origin.x - currentFrame.size.width/2, 
           currentFrame.origin.y - currentFrame.size.height/2, 
           currentFrame.size.width * 2, 
           currentFrame.size.height * 2); 
    button.frame = newFrame; 
}

Ce double la taille de votre bouton tout en gardant son centre même. (Attention votre bouton ne pousse pas sur le bord de votre vue lorsque vous faites cela.)

Modification de la police

changer simplement la propriété font du UIButton - le mettre à une nouvelle instance de UIFont, comme dans cet exemple:

button.font = [UIFont systemFontOfSize:16.0];

cela change à la police du système de police du bouton avec la taille 16.

police personnalisée

Ceci est une question un peu plus délicat, comme je suis sûr que vous ne pouvez pas charger vos propres fichiers de police personnalisé, même si vous les inclure dans votre paquet d'applications. Vous pouvez toutefois modifier la police par défaut d'un contrôle en utilisant la méthode de classe fontWithName:size: d'UIFont. Tous les noms de police sont disponibles via les méthodes familyNames et fontNamesForFamilyName: d'UIFont.

graphiques Button au lieu du texte

C'est le plus simple des cinq - juste ne fixent pas le texte sur le bouton, mais au lieu de définir une image d'arrière-plan UIControlStateNormal (voir ci-dessus).

+0

J'ai seulement voulu les questions de bouton comme exemples mais wow! commutation de réponse acceptée. – RCIX

+1

Gardez à l'esprit que tout cela est fait par programme (je n'utilise que rarement, sinon jamais, l'Interface Builder), mais vous pouvez bien sûr utiliser IB pour accomplir la plupart de ces choses aussi. – Tim

3

Oui. 1,312, et 5 peut être accompli sans code, en utilisant les attributs du bouton dans Interface Builder. Pour changer la police, faites apparaître le panneau de polices (Commande-T) avec le bouton sélectionné. Faire croître le bouton nécessite l'ajout de code qui est exécuté quand on clique dessus

Vous pouvez mettre quelques lignes comme ceci dans votre contrôleur de vue, et il devrait faire l'affaire:

- (void)buttonClicked:(id)sender 
{ 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration: 0.4]; 
    [sender setFrame:CGRectMake(--,--,--,--)]; //replace with slightly bigger button frame 
    [UIView commitAnimations]; 
} 
Questions connexes