18

enter image description hereUIPopover Bu gibi düğmelerle nasıl bir popover yapabilirim?

Böyle bir düğmeyle nasıl bir popover oluşturabileceğimi merak ediyorum.

CEVAP: Temsilcili nesne sınıfında başka

UIActionSheet * actionSheet = [[UIActionSheet alloc] initWithTitle: nil 
                  delegate: self 
               cancelButtonTitle: nil 
              destructiveButtonTitle: nil 
               otherButtonTitles: @"Take Photo", 
                    @"Choose Existing Photo", nil]; 

[actionSheet showFromRect: button.frame inView: button.superview animated: YES]; 

yerde ...

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if (buttonIndex == 0) { 
     // take photo... 
    } 
    else if (buttonIndex == 1) { 
     // choose existing photo... 
    } 
} 

cevap

43

Bu UIActionSheet olduğunu. IPhone'da, alttan canlanıyor. IPad'de bir popover içinde görünür.

bir düğmeye basarak da yaparsınız varsayarsak:

UIActionSheet * actionSheet = [[UIActionSheet alloc] initWithTitle: nil 
                  delegate: self 
               cancelButtonTitle: nil 
              destructiveButtonTitle: nil 
               otherButtonTitles: @"Take Photo", 
                    @"Choose Existing Photo", nil]; 

[actionSheet showFromRect: button.frame inView: button.superview animated: YES]; 

iOS8 + olarak, yeni UIAlertController sınıfını kullanmalısınız:

UIAlertController * alertController = [UIAlertController alertControllerWithTitle: nil 
                      message: nil 
                    preferredStyle: UIAlertControllerStyleActionSheet]; 
[alertController addAction: [UIAlertAction actionWithTitle: @"Take Photo" style: UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 
    // Handle Take Photo here 
}]]; 
[alertController addAction: [UIAlertAction actionWithTitle: @"Choose Existing Photo" style: UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 
    // Handle Choose Existing Photo here 
}]]; 

alertController.modalPresentationStyle = UIModalPresentationPopover; 

UIPopoverPresentationController * popover = alertController.popoverPresentationController; 
popover.permittedArrowDirections = UIPopoverArrowDirectionUp; 
popover.sourceView = sender; 
popover.sourceRect = sender.bounds; 

[self presentViewController: alertController animated: YES completion: nil]; 

veya Swift içinde,

let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .ActionSheet) 
alertController.addAction(UIAlertAction(title: "Take Photo", style: .Default, handler: { alertAction in 
    // Handle Take Photo here 
    })) 
alertController.addAction(UIAlertAction(title: "Choose Existing Photo", style: .Default, handler: { alertAction in 
    // Handle Choose Existing Photo 
    })) 
alertController.modalPresentationStyle = .Popover 

let popover = alertController.popoverPresentationController! 
popover.permittedArrowDirections = .Up 
popover.sourceView = sender 
popover.sourceRect = sender.bounds 

presentViewController(alertController, animated: true, completion: nil) 
+0

Bunu yalnızca Popover görünümüne ekledim mi? – ManOx

+0

Hayır, yalnızca UIActionSheet showFrom ... yöntemlerinden birini kullanın. Örnek –

+0

Okay ve 1 soru için güncellenmiş cevabımı görün, düğmelere olay işleyicilerini nasıl ayarlayabilirim? – ManOx

2

Diğer yanıtlara benzer, ancak bu karşılaştırmak için uygulanması çok kolaydır.

Sınıfınızı UIActionSheetDelegate kullanın.

Örnek:

@interface ExampleViewController : UIViewController <UIActionSheetDelegate> 

Sonra bir düğmeye basıldıktan olay

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { //Get the name of the current pressed button 
NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex]; 
if ([buttonTitle isEqualToString:@"Remove"]) { 
    NSLog(@"Remove this actionSheet"); } 
if ([buttonTitle isEqualToString:@"Button 1"]) { 
    NSLog(@"Button 1 pressed"); } 
if ([buttonTitle isEqualToString:@"Button 2"]) { 
    NSLog(@"Button 2 pressed"); } 
if ([buttonTitle isEqualToString:@"Button 3"]) { 
    NSLog(@"Button 3 pressed"); } 
if ([buttonTitle isEqualToString:@"Cancel"]) { 
    NSLog(@"Cancel clicked (anywhere away from it)"); } } 

Şimdi ExampleViewController.mm/m eklemek veya istediğiniz/ne zaman nerede bu şu çağrı açılır için:

- (IBAction)aButtonPressed:(id)sender { 
    NSString *actionSheetTitle = @"Action Sheet"; // Title 
    NSString *destroyTitle = @"Destroy"; // Button titles 
    NSString *button1 = @"Button 1"; 
    NSString *button2 = @"Button 2"; 
    NSString *button3 = @"Button 3"; 
    NSString *cancelTitle = @"Cancel"; 
    UIActionSheet *actionSheet = [[UIActionSheet alloc] 
                                  initWithTitle:actionSheetTitle 
                                  delegate:self 
                                   cancelButtonTitle:cancelTitle 
                                  destructiveButtonTitle:destroyTitle 
                                  otherButtonTitles:button1, button2, button3, nil]; [actionSheet showInView:self.view]; 
} 

Ve daha fazla bilgi için bu @: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIActionSheet_Class/Reference/Reference.html

+1

[actionSheet showFromRect: [(UIButton *) gönderen çerçevesini] eklemeyi unutmayın: view: self.view animated: YES]; Gönderici düğmesine popover eklemek için. –

İlgili konular