简体   繁体   English

UIAlerController操作表第二次不响应

[英]UIAlerController Action Sheet does not respond the second time it's called

I have something like the following code. 我有类似下面的代码。 The Action sheet runs doSomething OK when it appears for the first time (in a button IBAction), but when it appears the second time, nothing happens the Action sheet just disappear without calling do something. 动作表第一次出现(在按钮IBAction中)时运行doSomething OK,但是,当动作表第二次出现时,什么也没发生,动作表只是消失而无需调用。 Any idea? 任何想法?

@implementation ...

- (void) setActions {
    UIAlertAction *opt1 = [UIAlertAction actionWithTitle:@"Option 1" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
            [self doSomething:@"opt1"];}];

    UIAlertAction *opt2 = [UIAlertAction actionWithTitle:@"Option 2"    style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
            [self doSomething:@"opt2"];}];

    UIAlertAction *opt3 = ...

    self.opt1 = opt1;
    self.opt2 = opt2;
    self.opt3 = opt3;

- (void) showActionSheet {

    ...
UIAlertController *selectAS = [UIAlertController alertControllerWithTitle:@"Select Options"
 message:@"msg" preferredStyle:UIAlertControllerStyleActionSheet];

    if (xyz) {                  
          [selectAS addAction:self.opt1];
          [selectAS addAction:self.opt2];
        }
    else{            
          [selectAS addAction:self.opt1];
          [selectAS addAction:self.opt3];                    
        }
   [self presentViewController:selectqAS 
    animated:YES completion:nil];
        }

- (void) doSomething: (NSString *) opt{



  ....
    }

Glad we got you up and running. 很高兴我们帮助您启动并运行。 My guess is your methods are getting lost in translation. 我的猜测是您的方法在翻译中迷失了方向。 You have methods intertwining each other which can be causing the confusion, specifically with self.opt1 . 您有相互缠绕的方法,这可能引起混乱,特别是与self.opt1 per my comment, now that iOS8 has introduced UIAlertController , it comes with completion handlers, you should plan accordingly to that: something like the following : 根据我的评论,现在iOS8引入了UIAlertController ,它带有完成处理程序,您应该对此进行相应的计划:类似以下内容:

-(IBAction)showActionSheet {
    UIAlertController *selectAS = [UIAlertController alertControllerWithTitle:@"Select Options" message:@"msg" preferredStyle:UIAlertControllerStyleActionSheet];

     UIAlertAction *opt1 = [UIAlertAction actionWithTitle:@"Option 1" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        //Don't have to call another method, just put your action 1 code here. This is the power of completion handlers creating a more structured outline
     }];

     UIAlertAction *opt2 = [UIAlertAction actionWithTitle:@"Option 2" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        //Don't have to call another method, just put your action 2 code here. This is the power of completion handlers creating a more structured outline
     }];

     UIAlertAction *opt3 = ...

     if (xyz) {
       [selectAs addAction:opt1];
       [selectAs addAction:opt2];
     } else {
       [selectAs addAction:opt1];
       [selectAs addAction:opt3];
     }        

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

 }

Much more cleaner and actually uses the UIAlertController for it's intended purposes, no other method calls needed. 更清洁,并且实际上将UIAlertController用于其预期目的,而无需其他方法调用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM