Commutateur dans le controller UIAlert par programme

Je crée une boîte de dialog d'logging dans swift avec 3 champ de text et un commutateur et j'ajoute avec succès trois champ de text deux l'alerte. Le code suivant montre la même chose.

let alertController = UIAlertController(title: "Register", message: "", preferredStyle: .Alert) let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in // ... exit(0) } alertController.addAction(cancelAction) let OKAction = UIAlertAction(title: "Sign UP", style: .Default) { (action) in // ... let name0 = alertController.textFields![0] as UITextField print("Text field: \(name0.text)") let email1 = alertController.textFields![1] as UITextField print("Text field: \(email1.text)") let company2 = alertController.textFields![2] as UITextField print("Text field: \(company2.text)") } alertController.addAction(OKAction) alertController.addTextFieldWithConfigurationHandler { (textField) in textField.placeholder = "Name" textField.keyboardType = .EmailAddress } alertController.addTextFieldWithConfigurationHandler { (textField) in textField.placeholder = "Email" textField.secureTextEntry = false } alertController.addTextFieldWithConfigurationHandler { (textField) in textField.placeholder = "Company" textField.secureTextEntry = false } self.presentViewController(alertController, animated: true) { // ... } 

Maintenant, j'ai besoin d'append un commutateur par programmation à la vue d'alerte. Nous le faisons dans Swift2. Est-ce possible? Je suis nouveau à Swift.

Cela peut vous aider.

Ajoutez cette méthode appel alertController.view.addSubview(createSwitch()) dans le code ci-dessus après alertController.addAction(OKAction) .

 func createSwitch () -> UISwitch{ let switchControl = UISwitch(frame:CGRectMake(10, 20, 0, 0)); switchControl.on = true switchControl.setOn(true, animated: false); switchControl.addTarget(self, action: "switchValueDidChange:", forControlEvents: .ValueChanged); return switchControl } func switchValueDidChange(sender:UISwitch!){ print("Switch Value : \(sender.on))") } 

OutPut:

entrez la description de l'image ici

Vous pouvez utiliser le RightView du TextField pour append un button. Ajouter un commutateur serait bien, mais le commutateur ne rentre pas dans la hauteur TextField et vous ne pouvez pas changer la hauteur. Pour ce faire, vous pouvez append un button et utiliser des images pour créer une TickBox.

AlertController avec TickBox

J'ai arraché ceci d'un projet ainsi l'image d'exemple est un peu plus que ci-dessous.

Dans l'en-tête ViewController, ajoutez le délégué TextField

 @interface CustomTableViewController : UITableViewController <UITextFieldDelegate> 

Créez ensuite votre AlertController et ajoutez le TextField

 // create an alert controller UIAlertController *alertWithText = [UIAlertController alertControllerWithTitle:title message:body preferredStyle:UIAlertControllerStyleAlert]; // create the actions handled by each button UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]; UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) { }]; // add the actions to the alert [alertWithText addAction:action1]; [alertWithText addAction:action2]; // Establish the weak self reference __weak typeof(self) weakSelf = self; [alertWithText addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) { // Create button UIButton *checkbox = [UIButton buttonWithType:UIButtonTypeCustom]; [checkbox setFrame:CGRectMake(2 , 2, 18, 18)]; // Not sure about size [checkbox setTag:1]; [checkbox addTarget:weakSelf action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; // Setup image for button [checkbox.imageView setContentMode:UIViewContentModeScaleAspectFit]; [checkbox setImage:[UIImage imageNamed:@"unchecked_checkbox.png"] forState:UIControlStateNormal]; [checkbox setImage:[UIImage imageNamed:@"checked_checkbox.png"] forState:UIControlStateSelected]; [checkbox setImage:[UIImage imageNamed:@"checked_checkbox.png"] forState:UIControlStateHighlighted]; [checkbox setAdjustsImageWhenHighlighted:TRUE]; // Setup the right view in the text field [textField setClearButtonMode:UITextFieldViewModeAlways]; [textField setRightViewMode:UITextFieldViewModeAlways]; [textField setRightView:checkbox]; // Setup Tag so the textfield can be identified [textField setTag:-1]; [textField setDelegate:weakSelf]; // Setup textfield [textField setText:@"Essential"]; // Could be place holder text }]; [self presentViewController:alertWithText animated:YES completion:nil]; 

Vous devez arrêter le champ de text de l'édition si vous voulez simplement que cette ligne soit cochée.

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ if(textField.tag == -1){ return NO; } return YES; } 

Et votre action pour votre button

 -(void)buttonPressed:(UIButton*)sender { if(sender.selected){ [sender setSelected:FALSE]; } else { [sender setSelected:TRUE]; } } 

Voici quelques images de cases à cocher (il y en a beaucoup là-bas, vous pouvez même faire un changement et essayer d'animer).

Case non cochée Case cochée