Кто-то сделал UIActionSheet (buttonIndex, делегат) более похожим на UIButton (addTarget: action)? - PullRequest
0 голосов
/ 09 ноября 2011

Я видел этот твит от Marco Armant:

Подкласс UIActionSheet w/target:action:userInfo: на кнопках, чтобы избежать делегатов / buttonIndex.Разве кто-то еще не делал это?Не могу найти его.

Я думаю, это звучит как отличная идея, но я не смог найти чей-то код, который сделал это.Кто-нибудь знает один, прежде чем я пойду, сделаю это сам?

1 Ответ

2 голосов
/ 09 ноября 2011

Да, смотрите мой github для OHActionSheet.

Он реализован с использованием блоков, так что вы можете использовать его таким образом, даже не депортируя целевой код / ​​код действия в другом месте в вашем исходном коде, большое преимущество в том, что все находится в том же месте в вашем исходном коде, и что вы можете использовать столько же OHActionSheets, сколько хотите в одном контроллере

NSURL* anURL = ... // some URL (this is only as an example on using out-of-scope variables  in blocks)
[OHActionSheet showSheetInView:yourView
                         title:@"Open this URL?"
             cancelButtonTitle:@"Cancel"
        destructiveButtonTitle:nil
             otherButtonTitles:[NSArray arrayWithObjects:@"Open",@"Bookmark",nil]
                    completion:^(OHActionSheet* sheet,NSInteger buttonIndex) {
   if (buttonIndex == sheet.cancelButtonIndex) {
     NSLog(@"You cancelled");
   } else {
     NSLog(@"You choosed button %d",buttonIndex);
     switch (buttonIndex-sheet.firstOtherButtonIndex) {
       case 0: // Open
         // here you can access the anURL variable even if this code is executed asynchrously, thanks to the magic of blocks!
         [[UIApplication sharedApplication] openURL:anURL];
         break;
       case 1: // Bookmark
       default:
         // Here you can even embed another OHAlertView for example
         [OHAlertView showAlertWithTitle:@"Wooops"
                                 message:@"This feature is not available yet, sorry!"
                            cancelButton:@"Damn"
                            otherButtons:nil
                          onButtonTapped:nil]; // no need for a completion block here
         break;
     } // switch
   }
 }];

[EDIT] Отредактированный пример кода для добавления дополнительной информации и примеров использования

...