如何在通过UIAlertViewController添加的Action表上禁用按钮操作 - (iOS 9/10)

时间:2017-01-16 11:35:19

标签: ios objective-c ios9 uialertcontroller uiactionsheet

我制作了一个像这样的ActionSheet:

enter image description here

现在我想要更改颜色+ "ProfilesDisplay.xml"Cancel,让他们觉得它们是Delete

我可以更改所有按钮的颜色,但不能更改个人。

我尝试过使用类别但我仍然disabled warining ActionSheet Depreciated。而且代码也不起作用。

我写了这段代码:

      - (void)setButton:(NSInteger)buttonIndex toState:(BOOL)enabled {
for (UIView* view in self.subviews)
{
    if ([view isKindOfClass:[UIButton class]])
    {
        if (buttonIndex == 0) {
            if ([view respondsToSelector:@selector(setEnabled:)])
            {
                UIButton* button = (UIButton*)view;
                button.enabled = enabled;
            }
        }
        buttonIndex--;
    }
}
 }

是否可以通过Action sheetAlertViewController提供的部分按钮提供禁用外观。

以下是我提供行动表的代码:

 UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:@"Action Sheet" message:@"Using the alert controller" preferredStyle:UIAlertControllerStyleActionSheet];
 [actionSheet.view setTintColor:[UIColor redColor]];
[actionSheet addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {

    // Cancel button tappped.


    [self dismissViewControllerAnimated:YES completion:^{
    }];
}]];

[actionSheet addAction:[UIAlertAction actionWithTitle:@"Delete" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {

    // Distructive button tapped.
    [self dismissViewControllerAnimated:YES completion:^{
    }];
}]];

[actionSheet addAction:[UIAlertAction actionWithTitle:@"Group 1" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {

    // Distructive button tapped.
    [self dismissViewControllerAnimated:YES completion:^{
    }];
}]];

[actionSheet addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {

    // OK button tapped.

    [self dismissViewControllerAnimated:YES completion:^{
    }];
}]];


// Present action sheet.
[self presentViewController:actionSheet animated:YES completion:nil];

2 个答案:

答案 0 :(得分:4)

您可以使用setEnabled的{​​{1}}属性。

这会将您的按钮渲染为“灰色”。

我修改了一段代码以包含此更改:

UIAlertAction

当然,禁用后无法点击按钮

其他选项涉及使用UIAlertAction *action = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { // OK button tapped. [self dismissViewControllerAnimated:YES completion:^{ }]; }]; [action setEnabled:NO]; [actionSheet addAction:action]; 。 有三个:

UIAlertActionStyle

UIAlertActionStyleDefault, UIAlertActionStyleCancel, UIAlertActionStyleDestructive 将使用UIAlertActionStyleDefault呈现您的按钮。

tintColor会在表格底部呈现您的按钮。

UIAlertActionStyleCancel使用“红色”呈现您的按钮。 (想一想:删除按钮)

答案 1 :(得分:1)

获取actions数组并更改所需操作的状态。 这样,即使添加动作,您也可以更改状态。

以下是示例代码。

NSArray* actionlist = actionSheet.actions;
UIAlertAction * action2 = [actionlist objectAtIndex:1];    
action2.enabled = false;

// Present action sheet.
[self presentViewController:actionSheet animated:YES completion:nil];