菜鸟教程小白 发表于 2022-12-13 13:56:15

ios - 未调用dismissViewController 完成处理程序


                                            <p><p>尝试使用链接中第一个答案中的代码(由 Kampai 提供):
<a href="https://stackoverflow.com/questions/27632614/how-to-use-uialertcontroller-to-replace-uiactionsheet" rel="noreferrer noopener nofollow">How to use UIAlertController to replace UIActionSheet?</a> </p>

<p>但是,我的代码中甚至没有调用完成处理程序。 </p>

<p>按下两个按钮后可以关闭警报操作表,但完成处理程序内部没有任何作用。
知道可能是什么问题吗?我是使用完成处理程序的新手,并试图在网上找到答案,但很少有人遇到与我相同的问题。</p>

<pre><code>- (IBAction)takePhotoButtonPressed:(UIButton *)sender {
pressedButtonTagNumber = sender.tag;

UIAlertController *actionSheet = ;

[actionSheet addAction:[UIAlertAction actionWithTitle:@&#34;Cancel&#34; style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {

    // Cancel button tappped
    [self dismissViewControllerAnimated:YES completion:^{
    }];
}]];

[actionSheet addAction:[UIAlertAction actionWithTitle:@&#34;Take a Photo&#34; style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
    NSLog(@&#34;!&#34;);
    // Take a Photo button tapped
    [self dismissViewControllerAnimated:YES completion:^{
      NSLog(@&#34;0&#34;); // NOT CALLED
      // Initialize UIImagePickerController
      UIImagePickerController *takePhotoImagePickerController = [ init];            takePhotoImagePickerController.delegate = self;
      takePhotoImagePickerController.allowsEditing = YES;
      NSLog(@&#34;1&#34;);
      // Check and assign image source
      if (!) {
            NSLog(@&#34;2&#34;);
            UIAlertController *noCameraErrorSheet = ;
            [noCameraErrorSheet addAction:[UIAlertAction actionWithTitle:@&#34;Cancel&#34; style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
                // Cancel button tappped
                [self dismissViewControllerAnimated:YES completion:^{
                }];
            }]];
      } else {
            takePhotoImagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
            // Present UIImagePickerController
            ;
      }

    }];
}]];
</code></pre>

<p><strong>解决方案:</strong></p>

<p>@Paulw11 解决方案效果很好:</p>

<p>1) UIAlertController 不需要dismissViewController。
2)如果一个新的 UIAlertController 包装它正在解散(显然),则无法调用它。
3) 最好提前检查和禁用按钮。</p>

<pre><code>UIAlertController *actionSheet = ;

[actionSheet addAction:[UIAlertAction actionWithTitle:@&#34;Cancel&#34; style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
}]];

UIAlertAction *takePhotoActionButton = [UIAlertAction actionWithTitle:@&#34;Take Photo&#34; style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
    ;
}];
UIAlertAction *uploadPhotoActionButton = [UIAlertAction actionWithTitle:@&#34;Upload from Library&#34; style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
    ;
}];

// Disable take a photo button if source not available
if (!) {
    ;
}
// Disable upload a photo button if source not available
if (!) {
    ;
}

;
;

// Present action sheet.
;
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您无需在操作处理程序中调用 <code>dismissViewController:animated:</code> 即可移除警报。 <code>UIAlertController</code> 在调用 Action 处理程序代码之前调用它来关闭自身。</p>

<p>在您的操作处理程序中,您只需执行选择该操作时应该执行的任何操作:</p>

<p>在这种情况下:</p>

<ul>
<li>在您的取消操作中,您无需执行任何操作</li>
<li>在你的“拍照” Action 中你拍照</li>
</ul>

<p>此外,从用户体验的角度来看,最好禁用“拍照”或在他们选择后立即显示警报,而不是在他们尝试拍照后发出警报;换句话说,早点而不是晚点指出问题</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 未调用dismissViewController 完成处理程序,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/38908826/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/38908826/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 未调用dismissViewController 完成处理程序