Нужна помощь в вызове метода после нажатия кнопки из таблицы UIActionSheet - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть UIActionSheet, который я могу успешно вызвать из UIBarButtonItem в моем приложении. Однако, когда я нажимаю на кнопку, которая находится на UIActionSheet, метод, который я пытаюсь заставить его вызвать, кажется, не вызывается, и UIActionSheet исчезает. Мой соответствующий код выглядит так:

В моем файле MapViewController.h:

@interface MapViewController : UIViewController<MKMapViewDelegate, UIActionSheetDelegate>{

В моем файле MapViewController.m:

-(IBAction)showActionSheet {
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Share your favourite restaurant with your friends" delegate:nil cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"EMail",@"Facebook",@"Twitter",nil];
[actionSheet showInView:self.view];
[actionSheet release];
}

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
if(buttonIndex == 0)
    NSLog(@"You chose email!");
if(buttonIndex == 1)
    NSLog(@"You chose facebook!");
if(buttonIndex == 2)
    NSLog(@"You chose twitter!");
}

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

Ответы [ 3 ]

0 голосов
/ 07 апреля 2011

Может быть, вы забудете установить делегата, добавьте ниже в свой код

actionSheet.delegate = self ;

Из документации ... Делегат получателя или ноль, если у него нет делегата.

@property(nonatomic, assign) id<UIActionSheetDelegate> delegate
0 голосов
/ 07 апреля 2011
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Share your favourite restaurant with your friends" delegate:nil cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"EMail",@"Facebook",@"Twitter",nil];

должно быть

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Share your favourite restaurant with your friends" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"EMail",@"Facebook",@"Twitter",nil];

А также убедитесь, что в вашем файле .h реализован протокол UIActionSheetDelegate

0 голосов
/ 07 апреля 2011

Вы передаете nil как делегат, но делегат - ваш контроллер представления, поэтому передайте self:

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Share your favourite restaurant with your friends" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"EMail",@"Facebook",@"Twitter",nil];
...