以编程方式切换UIAlert控制器

Ebi*_*Joy 5 uiswitch ios swift uialertcontroller

我正在swift中创建一个注册对话框,其中包含3个文本字段和一个Switch,我成功添加了三个文本字段两个Alert.以下代码显示相同.

 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) {
                // ...
            }
Run Code Online (Sandbox Code Playgroud)

现在我需要以编程方式将一个开关添加到Alert View.我们在Swift2中这样做.有可能吗?,我是Swift的新手.

tec*_*erd 10

这可能对你有所帮助.

alertController.view.addSubview(createSwitch()) 之后在上面的代码中 添加此方法调用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))")
}
Run Code Online (Sandbox Code Playgroud)

OutPut:

在此输入图像描述


Rec*_*eel 5

您可以使用TextField的RightView添加按钮。添加一个开关会很好,但是该开关不适合TextField的高度,也不能更改高度。为此,您可以添加一个按钮并使用图像制作一个TickBox。

带TickBox的AlertController

我已经将其从项目中剥离出来,因此示例图像仅比下面略多。

在ViewController标头中,添加TextField委托

@interface CustomTableViewController : UITableViewController <UITextFieldDelegate>
Run Code Online (Sandbox Code Playgroud)

然后创建您的AlertController并添加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];
Run Code Online (Sandbox Code Playgroud)

如果您只希望该行成为刻度,则需要停止编辑文本字段。

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

    return YES;
} 
Run Code Online (Sandbox Code Playgroud)

而您对按钮的操作

-(void)buttonPressed:(UIButton*)sender {

    if(sender.selected){
        [sender setSelected:FALSE];
    } else {
        [sender setSelected:TRUE];
    }
}
Run Code Online (Sandbox Code Playgroud)

这里也有一些勾选框图像(那里有很多复选框,您甚至可以进行切换并尝试制作动画)。

未选中的框选中框