Ajout UISegmentedControls (ou UISwitches, que je recommande personnellement pour un simple on/off en option) est assez facile à mettre dans les cellules de vue de table en utilisant la propriété accessoryView.
Votre contrôleur de vue (ou tout autre objet que vous utilisez pour contrôler cette chose) doit implémenter le protocole UITableViewDataSource.
@interface MyViewController : UIViewController<UITableViewDataSource, UITableViewDelegate> {}
@end
Ajouter les contrôles tableView: cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString* const SwitchCellID = @"SwitchCell";
UITableViewCell* aCell = [tableView dequeueReusableCellWithIdentifier:SwitchCellID];
if(aCell == nil) {
aCell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SwitchCellID] autorelease];
aCell.textLabel.text = [NSString stringWithFormat:@"Option %d", [indexPath row] + 1];
aCell.selectionStyle = UITableViewCellSelectionStyleNone;
UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero];
aCell.accessoryView = switchView;
[switchView setOn:YES animated:NO];
[switchView addTarget:self action:@selector(soundSwitched:) forControlEvents:UIControlEventValueChanged];
[switchView release];
}
return aCell;
}
Ou, si vous définissez sur les contrôles segmentés, remplacer les choses UISwitch ci-dessus avec quelque chose comme:
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"On", @"Off", nil]];
segmentedControl.autoresizingMask = UIViewAutoresizingFlexibleWidth;
segmentedControl.segmentedControlStyle = UISegmentedControlStylePlain;
segmentedControl.frame = CGRectMake(75, 5, 130, 30);
segmentedControl.selectedSegmentIndex = 0;
[segmentedControl addTarget:self action:@selector(controlSwitched:) forControlEvents:UIControlEventValueChanged];
aCell.accessoryView = segmentedControl;
[segmentedControl release];
I mettrait personnellement ces options dans une vue régulière (probablement accessible à partir d'un bouton d'options qui fait la transition flip, comme de nombreuses applications iPhone le font). Je ne pense pas que le mettre dans une vue alerte est une très bonne expérience utilisateur.
Cependant, j'ai écrit quelques articles de blog montrant comment mettre diverses vues dans les vues d'alerte (text field, qui est plutôt utile, et web view, qui est discutablement pas).
Donc, si vous êtes vraiment mort ensemble à mettre cela en une vue d'alerte, vous pouvez tout à fait faire, comme ceci:
- (void) doAlertWithListView {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Preferences"
message:@"\n\n\n\n\n\n\n"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
UITableView *myView = [[[UITableView alloc] initWithFrame:CGRectMake(10, 40, 264, 150)
style:UITableViewStyleGrouped] autorelease];
myView.delegate = self;
myView.dataSource = self;
myView.backgroundColor = [UIColor clearColor];
[alert addSubview:myView];
[alert show];
[alert release];
}
Il ressemblera à quelque chose comme ceci:
Merci pasternack !! Je vais essayer ... et laissez-vous savoir. Merci encore...!! – rockey
Bonjour Pasternack! ça a marché ... !! Merci ..:] – rockey
vous devez implémenter 'UITableViewDelegate' à votre' MyViewController 'pour pouvoir définir' myView.delegate = self; ' –