Switch in UIAlert Controller programmatically

后端 未结 4 1655
天命终不由人
天命终不由人 2021-02-06 09:50

I am creating an registration dialog in swift with 3 text field and one Switch and I successfully add three text field two the Alert. The following code shows the same.

4条回答
  •  不要未来只要你来
    2021-02-06 10:34

    You can use the RightView of the TextField to add a button. Adding a switch would be nice but the switch does not fit into the TextField height nor can you change the height. To this end you can add a button and use images to make a TickBox.

    I have ripped this out of a project so the example image is a little more than below.

    In the ViewController header add the TextField Delegate

    @interface CustomTableViewController : UITableViewController 
    

    Then create your AlertController and add the 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];
    

    You need to stop the textfield from editing if you purely want that line to be a tick.

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

    And your action for your button

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

    Here are some tick box images too (there are plenty out there, you could even make a switch and try and animate).

提交回复
热议问题