2014-12-18 1 views
1

Я хочу уволить UIActionsheet, когда пользователь забирает где-нибудь еще на экране. Я не хочу, чтобы отменить кнопку отмены.Отклонить ActionSheet на ощупь вне его в iPhone

Мой код

UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:sheetTitle delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles: nil]; 

    [sheet setTag:indexPath.row]; 

    for (NSString *buttonTitle in buttonTitles) 
    { 
     [sheet addButtonWithTitle:buttonTitle]; 
    } 

    [sheet showFromToolbar:self.navigationController.toolbar]; 

    [sheet release]; 
    [buttonTitles release]; 

ответ

0

Это UIActionsheet функция по умолчанию dismiss при touch outside. Нет необходимости в дополнительном коде.

[sheet showFromToolbar:self.navigationController.toolbar]; 

ставит проблему, я думаю. Измените его на

[sheet showInView:[UIApplication sharedApplication].keyWindow]; 
+2

спасибо для вашего ответа, но это не отклоняется по умолчанию. Я думаю, что это поведение для iPad, а не для iPhone. – user2893370

+0

[лист showFromToolbar: self.navigationController.toolbar]; делает проблему, я думаю. Измените его на [sheet showInView: [UIApplication sharedApplication] .keyWindow]; –

+0

@SudhinDavis - ваш ответ хороший –

1

Сделайте свой объект ActionSheet глобальным, а затем выделите его в свой блок. то вы можете уволить его из внешнего события касания на ваш взгляд. добавить в свой блок следующий блок.

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [sheet removeFromSuperView]; 
    sheet=nil; 
} 

надеюсь, что это поможет вам

+0

не то, что это зависит от потока выше блока. Я применил это в своих представлениях. и этот сценарий работает во всем, что и требовалось. когда он применит это, тогда сработайте. потому что какой сценарий он использует, мы не можем решить вышеупомянутый кусок кода ... ;-) –

+0

Не вызывайте removeFromSuperview. Используйте надлежащий метод для отклонения листа действий. – rmaddy

+0

спасибо @rmaddy, чтобы очистить свои знания –

1

попробовать этот

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOut:)]; 
tap.cancelsTouchesInView = NO; 
[actionSheet.window addGestureRecognizer:tap]; 
[tap release];`<br> `-(void)tapOut:(UIGestureRecognizer *)gestureRecognizer { 
CGPoint p = [gestureRecognizer locationInView:self.actionSheet]; 

if (p.y < 0) { 
    [actionSheet dismissWithClickedButtonIndex:0 animated:YES]; 
} 
} 
+0

no method like removeFromSuperView – user2893370

+0

yes actionSheet может быть отклонен – Sam

+0

не работает с '[actionSheet rejectWithClickedButtonIndex: 0 анимированный: YES];'. – user2893370

0

Declare ActionSheet глобально, а затем вставить этот код после viewdidload

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 

     [super touchesBegan:touches withEvent:event]; 
     [actionSheet dismissWithClickedButtonIndex:0 animated:YES]; 
    } 

работает 100%

Смежные вопросы