2012-12-10 6 views
0

J'ai deux vues de défilement. J'ai mis beaucoup de boutons sur la première vue de défilement. Lorsque je clique sur un bouton dans la première vue de défilement, les boutons associés remplissent la deuxième vue de défilement.défilement + bouton de segment + iOS

Je souhaite que les boutons de la première vue de défilement aient l'effet d'un contrôle de segment. c'est-à-dire que lorsqu'un bouton est cliqué, son image devient faible et ne peut plus être cliquée jusqu'à ce que les autres boutons du premier motif de défilement soient cliqués.

Comment y parvenir? n'importe quel code d'échantillon est apprécié! Merci!

Répondre

1

tu ne peux pas garder une trace de ce qui touche était au dernier clic, et réinitialiser celui-là pour être à l'état actif, et définir celui que vous cliquez maintenant à l'état inactif? Il suffit de créer une propriété, lastClicked et faire:

-(IBAction) buttonClicked:(UIButton *)sender { 
    [self.lastClicked setUserInteractionEnabled:YES]; 
    [self.lastClicked setImage:[UIImage imageNamed:@"enabledImage"] forState:UIControlStateNormal]; 
    [sender setUserInteractionEnabled:NO]; 
    [sender setImage:[UIImage imageNamed:@"disabledImage"] forState:UIControlStateNormal]; 
    self.lastClicked = sender;  
} 
+0

merci! semble une bonne idée. J'essaierai bientôt. – user1188849

+0

Cher rdelmar, je travaille! Merci beaucoup! – user1188849

0

Super simple, très moche, mais ça marche. Vous pouvez optimiser cela en faisant vérifier l'image et l'état d'interaction du bouton, de sorte que vous ne définissez pas une image chaque fois que cette boucle traverse.

-(void) buttonClicked:(UIButton *)sender { 
    for (UIButton *btn in self.scrollView.subviews) { 
     if ([sender isKindOfClass:[UIButton class]]) { 

      if (btn == sender) { 
       [btn setUserInteractionEnabled:NO]; 
       [btn setImage:[UIImage imageNamed:@"disabledImage"] forState:UIControlStateNormal]; 
      } else { 
       [btn setUserInteractionEnabled:YES]; 
       [btn setImage:[UIImage imageNamed:@"enabledImage"] forState:UIControlStateNormal]; 
      } 
     } 

    } 
} 
+0

merci CodaFi tellement pour votre réponse super rapide et simple! J'avais pensé que je devais utiliser l'étiquette de bouton. reviendra à vous une fois que je l'ai testé. – user1188849

+0

Cher CodaFi, Je fais glisser et ajoute mes boutons sur la première vue de défilement de la bibliothèque, au lieu de par le code. lorsque j'utilise le '- (IBAction) btnClick: (id) expéditeur {for (UIButton * btn dans self.scrollView.subviews) { if (btn == expéditeur) { [btn setUserInteractionEnabled: NO]; [btn setImage: [UIImage imageNamed: @ "disabledImage"] pourEtat: UIControlStateNormal]; } else { [btn setUserInteractionEnabled: YES]; [btn setImage: [UIImage imageNommé: @ "enabledImage"] forState: UIControlStateNormal]; } }} – user1188849

+0

Erreur de suivi: 2012-12-10 10: 26: 37.028 Autoscroll [457: b603] - [UIImageView setImage: forState:]: sélecteur non reconnu envoyé à l'instance 0x4b7a130 2012-12-10 10:26: 37.032 Autoscroll [457: b603] *** Fin de l'application due à l'exception non interceptée 'NSInvalidArgumentException', raison: '- [UIImageView setImage: forState:]: sélecteur non reconnu envoyé à l'instance 0x4b7a130' *** Pile d'appel au premier lancement: ( \t 0 CoreFoundation 0x00dce5a9 __exceptionPreprocess + 185 \t 1 libobjc.A.dylib 0x00f22313 objc_exception_throw + 44 – user1188849

1

Essayez d'ajouter un contrôle segmenté dans une vue de défilement.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    journals = [[NSMutableArray alloc]init]; 

    self.tableView.dataSource = self; 
    self.tableView.delegate = self; 

    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 49, 320, 29)]; 
    self.segmentedControl.frame = CGRectMake(0, 0, 640, 29); 

    scrollView.contentSize = CGSizeMake(self.segmentedControl.frame.size.width, self.segmentedControl.frame.size.height -1); 
    scrollView.showsHorizontalScrollIndicator = NO; 

    self.segmentedControl.selectedSegmentIndex = 0; 

    [scrollView addSubview:self.segmentedControl]; 
    [self.view addSubview:scrollView]; 

    [self fillJournals]; 

    // Do any additional setup after loading the view, typically from a nib. 
} 
+0

Notez que les réponses [link-only] (http://meta.stackoverflow.com/tags/link-only-answers/info) sont déconseillées, les réponses SO devraient être l'aboutissement d'une recherche de solution (vs. encore une autre escale de références, qui ont tendance à se figer au fil du temps). S'il vous plaît envisager d'ajouter un synopsis autonome ici, en gardant le lien comme référence. – kleopatra

+0

Valorisera ce kleopatra. – penningthoughts