2009-07-13 7 views
2

Je voudrais implémenter une vue (elle ira en fait dans le pied de page d'un UITableView) qui implémente 1-3 boutons. Je voudrais changer la disposition de ces boutons (et la taille des boutons eux-mêmes) en fonction de ceux qui apparaissent. Un exemple du comportement exact que je voudrais est au bas de l'écran d'informations dans l'application Contacts lorsque vous regardez un contact spécifique ("Ajouter aux Favoris" disparaît quand il est cliqué, et les autres boutons se développent pour prendre l'espace disponible dans une belle animation). Comme je suis en train de parcourir les différents scénarios de mise en page, je suis en train de coder toutes ces valeurs et je pense juste ... "ce n'est pas la façon dont je suis censé faire cela."Disposition dynamique des boutons sans position de codage en dur

Il semble même qu'Interface Builder possède certaines fonctionnalités qui peuvent le faire pour moi dans l'onglet Ruler, mais je serai sacrément si je peux comprendre comment ils fonctionnent (s'ils fonctionnent) sur le téléphone.

Est-ce que quelqu'un a des suggestions, ou un tutoriel en ligne que je pourrais regarder pour me diriger dans la bonne direction?

Merci beaucoup.

Répondre

0

Vous pouvez jeter un oeil à Stanford cs193p classes

Je pense qu'il ya une démo dans l'une des leçons/exemple où ils programaticaly régler le autoresize des boutons et d'autres où ils animent la vue. vous pouvez également rendre la vue définie dynamiquement la largeur de chacune de ses sous-vues (ownWidth/numberofSubView), la même chose pour la position de chaque élément.

[modifier] comme ça? ce n'est pas « dynamique » encore, mais vous avez eu l'idée vous pouvez augmenter/NumberOfButtons diminuer lorsque « l'ajout/suppression » un bouton puis réinitialiser le nouveau cadre de tous les sous-vues

- (void)loadView 
{ 

UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
view.backgroundColor = [UIColor lightGrayColor]; 
view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

int numberOfbuttons = 2; 
CGFloat buttonsLegth = (-20+view.bounds.size.width)/numberOfbuttons-20; 
for(int i=0;i<numberOfbuttons;i++){ 
    CGRect buttonFrame = CGRectMake(0, 0, buttonsLegth, 37); 
    buttonFrame.origin.x = (buttonFrame.size.width+20)*i + 20.0; 
    buttonFrame.origin.y = 20.0; 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // Autoreleased 
    button.frame = buttonFrame; 
    [button setTitle:@"Done" forState:UIControlStateNormal]; 
    [view addSubview:button]; 
    } 
self.view = view; 
[view release]; 
} 
+0

Evan mentionne les paramètres du masque d'autoresizing pour UIView dans la leçon 6 Ce n'est pas exactement ce que je cherche. Ma vue ne change jamais de taille ou de forme. La disposition des boutons dans la vue change en fonction des boutons qui sont dans la vue. – mmc

+0

Avez-vous déjà eu une réponse qui vous a plu? Je suis confronté au même dilemme et je dois croire qu'il existe un moyen plus simple de calculer la taille, etc., à l'exécution. – user282172

0

Salut supprimer tous les boutons vue et encore ajouter à l'aide de cette méthode ... vous devez passer le nombre de boutons et un UIView dans lequel vous souhaitez ajouter ces boutons

-(void)addButtons:(int)numberOfButtons ToView:(UIView *)containerView; 
{ 
    CGRect containerRect = containerView.frame; 

    CGFloat padding = 5.0; 
    CGFloat width = (containerRect.size.width - (padding*numberOfButtons+1))/numberOfButtons; 
    for (int i = 1; i<=numberOfButtons; i++) 
    { 
     UIButton * btn = [[[UIButton alloc] initWithFrame:CGRectMake(i*padding+width, 0, width, containerRect.size.height)]autorelease]; 

     //set Button Properties like Target,backColor,Title,,,,etc MUST SET TAG TO ACCESS THEM IN CLICK METHOD IF YOU ARE USING SAME SELECTOR FOR ALL BUTTONS. 

     [containerView addSubview:btn]; 
    } 

} 

Essayez et vous amuser ......

Questions connexes