2016-08-03 10 views
6

Я хочу использовать UIActionSheet для iOS8, но это не рекомендуется, и я не знаю, как использовать обновленный способ использовать это ...UIActionSheet Устаревшие на iOS8

Смотреть старый код:

-(void)acoesDoController:(UIViewController *)controller{ 
    self.controller = controller; 
    UIActionSheet *opcoes = [[UIActionSheet alloc]initWithTitle:self.contato.nome delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Delete" otherButtonTitles:@"other", nil]; 

    [opcoes showInView:controller.view]; 
} 

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 

    //switch case of the buttons 

} 

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

Как я могу правильно реализовать код выше?

+0

На будущее, если вы посмотрите на документацию для [UIActionSheet] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIActionSheet_Class/) это четко обозначено устаревшим с iOS8, и он даже говорит вам, что такое класс замены. И когда вы переходите к документации по [UIAlertController] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIAlertController_class/index.html#//apple_ref/occ/cl/UIAlertController), она даже дает вам пример того, как его использовать. Обучение чтению документации является важным первым шагом к улучшению. – Abizern

+0

Спасибо за подсказку! Я все еще начинаю с цели-с. –

ответ

27

Вы можете использовать UIAlertController для этого же.

UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:@"Action Sheet" message:@"alert controller" preferredStyle:UIAlertControllerStyleActionSheet]; 

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

      // Cancel button tappped. 
      [self dismissViewControllerAnimated:YES completion:^{ 
      }]; 
     }]]; 

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

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

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

      // OK button tapped. 

      [self dismissViewControllerAnimated:YES completion:^{ 
      }]; 
     }]]; 
    // Present action sheet. 
    [self presentViewController:actionSheet animated:YES completion:nil]; 
+0

Xcode показывает, что каждый метод «[self rejectViewControllerAnimated: YES завершение:^{ }];» не объявляется в @interfaces ... Как его исправить? ... То же самое происходит для «[self presentViewController: actionSheet анимированный: ДА завершение: ноль]; " –

+0

Можете ли вы поделиться обновленным кодом? – Nilesh

+0

Я уже решил это, спасибо. Я пытался реализовать это в классе, отличном от tableView. Я переместил код, и все сработало правильно ... но ... Можно ли создать другой класс для этого метода? Если вам все еще нужно, я могу поделиться своим кодом. –