2010-11-18 12 views
4

Je sais que Xcode n'ont pas la radio BoutonAjouter un bouton radio à Tableview Vous avez un problème

donc j'essayer d'ajouter un bouton personnalisé et faire l'action comme un bouton radio

Ceci est l'image que j'utilise alt text alt text

ce qui est le code que je mets à la cellule

UIButton *but = [UIButton buttonWithType:UIButtonTypeCustom]; 
[but setImage:[UIImage imageNamed:@"radio-off.png"] forState:UIControlStateNormal]; 
[but setImage:[UIImage imageNamed:@"radio-on.png"] forState:UIControlStateSelected]; 
[but setFrame:CGRectMake(0, 0, 44, 44)]; 
[but addTarget:self action:@selector(radioButton:) forControlEvents:UIControlEventTouchUpInside]; 
cell.accessoryView= but; 

et ce est le problème que je veux poser est

comment puis-je donner un vide dans - (IBAction)radioButton:(UIButton *)button

Pour contrôler deux boutons radio en deux rangées

Si la ligne 1 du bouton radio sélectionné est OUI

btn dans ligne 2 sera btn.state=NO et ne sera pas la réponse

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

Ce sera comme ce pic alt text

Comment régler le cas dans des conditions - (IBAction)radioButton:(UIButton *)button

ce pic est faux ... j'ajouter que le bouton dans la cellule ... et changé la couleur du texte

Grand merci à tous les amis de débordement de pile ~

+0

Savez-vous que TableView peut gérer Vérifiez nativement sur les cellules: http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/TableViewStyles/TableViewCharacteristics.html # // apple_ref/doc/uid/TP40007451-CH3-SW4 –

+0

Je sais ... mais mon patron insiste sur le fait que cette façon regarde mieux ... alors vous savez que ... –

Répondre

0

Vous aurez besoin d'un tableau de tous les boutons radio. Rappelez-vous que les cellules du tableau sont recyclées/peuvent ne pas être visibles, etc. créez donc un tableau avec les boutons, puis saisissez le bouton droit de ce tableau dans votre méthode tableView:cellForIndexPath:.

donc dans votre méthode tableView:cellForIndexPath: vous feriez quelque chose comme ceci:

cell.accessoryView = [myButtonArray objectAtIndex:[indexPath row]]; 

Ensuite, dans votre radioButton: méthode radioButtonPressed: vous feriez:

// Select the pressed button. 
[button setSelected:YES]; 
// Unselect all others. 
for (UIButton *other in myButtonArray) { 
    if (other != button) { 
     [other setSelected:NO]; 
    } 
} 
+0

OH! c'est une bonne solution ~ la première fois je pense que j'utilise 2 cellules, donc je n'ai besoin que si & else, Utiliser un tableau est beaucoup mieux que mon chemin! Comment puis-je annuler la ligne ne peut pas être touché quand le bouton n'est pas sélectionné ? –

1

OK..here comment ajouter une bouton dans une vue de table: dans tableviewController.h:

@interface RootViewController : UITableViewController { 
    NSMutableArray *radioButtonArray; 
} 

@property (nonatomic ,retain)NSMutableArray *radioButtonArray; 

dans tableviewController.hm

- (void)viewDidAppear:(BOOL)animated { 
    radioButtonArray = [NSMutableArray new]; 
    for (int i = 0; i < 30; i ++) { 
     UIButton *radioButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [radioButton setImage:[UIImage imageNamed:@"radio-off.png"] forState:UIControlStateNormal]; 
     [radioButton setImage:[UIImage imageNamed:@"radio-on.png"] forState:UIControlStateSelected]; 
     [radioButton setFrame:CGRectMake(0, 0, 44, 44)]; 
     [radioButton addTarget:self action:@selector(radioButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
     [radioButtonArray addObject:radioButton]; 
    } 
    [super viewDidAppear:animated]; 
} 

et lui donner un (IBAction) vide

- (IBAction)radioButtonPressed:(UIButton *)button{ 
    [button setSelected:YES]; 
    // Unselect all others. 
    for (UIButton *other in radioButtonArray) { 
     if (other != button) { 
      other.selected=NO; 
     } 
    } 
} 

que vous pouvez ajouter votre bouton dans la cellule

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    cell.accessoryView = [radioButtonArray objectAtIndex:[indexPath row]]; 
    // Configure the cell. 
    return cell; 
} 
+0

Encore ne sais pas comment laisser la cellule ne peut pas être touché si le bouton n'est pas sélectionné? –

+0

Thanks.It travaille .. – kushalrshah