2017-01-16 2 views
0

Я сделал ActionSheet так:Как отключить действие кнопки на листе действий добавленного с помощью UIAlertViewController - (прошивки 9/10)

enter image description here

Теперь я хочу изменить цвет Cancel И Delete, чтобы дать похоже, что они disabled.

Я могу изменить цвет всех кнопок, но не отдельных лиц.

Я пробовал использовать категории, но я продолжаю получать warining, что ActionSheet is 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 sheet представленных через AlertViewController.

Ниже мой код, чтобы представить Действие Лист:

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]; 
+0

Если вы хотите * отключить * действия, почему бы вам не опустить их условно? – vadian

+0

@vadian Я должен показать Пользователю, что это доступные варианты. Но вы не можете выбрать Пока вы не выполните условие. (например, IAP) – Dalvik

ответ

3

Что вы можете сделать, это использовать setEnabled свойство UIAlertAction.

Это сделает вашу кнопку «седой».

Я изменил кусок кода, чтобы включить эти изменения:

UIAlertAction *action = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 
    // OK button tapped. 
    [self dismissViewControllerAnimated:YES completion:^{ 
    }]; 
}]; 

[action setEnabled:NO]; 
[actionSheet addAction:action]; 

Ofcourse, вы не можете нажать на кнопку после его отключения.

Другие варианты включают использование UIAlertActionStyle. Есть три:

UIAlertActionStyleDefault, 
UIAlertActionStyleCancel, 
UIAlertActionStyleDestructive 

UIAlertActionStyleDefault сделает вашу кнопку с tintColor.

UIAlertActionStyleCancel отобразит вашу кнопку на нижней стороне листа.

UIAlertActionStyleDestructive делает вашу кнопку «красной». (Think: Delete)

+0

Это работает быстро? Поскольку я попробовал actionSheetController.isEnabled = false. Но дает ошибку «Значение типа« UIAlertController »не имеет члена 'isEnabled'. – Amanpreet

+0

Да, это также должно работать в Swift. Обратите внимание, что я устанавливаю' setEnabled' на 'UIAlertAction', а не на' UIAlertController'. – Ramon

+1

Yup! Я заметил. Спасибо! – Amanpreet

1

Получить массив действий и изменить состояние для действия, которое вы хотите. Таким образом вы можете изменить состояние даже после добавления действия.

Вот пример кода.

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

// Present action sheet. 
[self presentViewController:actionSheet animated:YES completion:nil]; 
Смежные вопросы