菜鸟教程小白 发表于 2022-12-12 18:17:23

ios - UIActivityViewController,事件未完成,共享选项未加载


                                            <p><p>我有一个带有分享按钮的应用。这个分享按钮加载一个 UIActivityViewController 用于分享到 Facebook、Twitter、电子邮件、短信等。</p>

<p>它以前可以正常工作,我认为它在模拟器上仍然可以正常工作,但是在设备上, ViewController 会显示所有正确的选项,如果你点击一个,要么什么都没有发生,或者如果它是邮件,邮件模态视图加载然后自行关闭。然后我得到我的日志“未执行事件。”,这是当完成 block 返回 false 完成但 activityType 不为空时。所以它正在识别选择,但由于某种原因它没有将事件加载到 View 中</p>

<p>我检查了我要分享的东西,甚至用虚拟的东西代替了它(如下所示),仍然没有运气。我使用的是普通设备,我设置了 Twitter、Mail 和 Facebook 帐户,发短信也可以。唯一有效的是复制(即当您将共享内容复制到剪贴板时)。在同一设备上的其他应用程序中,UIActivityViewController 和所选事件的加载工作得很好。在运行该应用的其他设备上也发现了同样的问题。</p>

<p>真的不明白这里的问题是什么。非常令人困惑!任何尝试的帮助或建议将不胜感激。我没有看到任何调试此问题的方法。</p>

<p>这是代码:(注意我也尝试删除图像,没有运气)</p>

<pre><code>- (void)shareTapped {

    NSString *shareText = @&#34;Testing&#34;;//;

    NSURL *url = ; //;
    NSArray *activityItems = ;

    UIActivityViewController *shareDrawer = [ initWithActivityItems:activityItems applicationActivities:nil];
shareDrawer.excludedActivityTypes = @;

    shareDrawer.completionHandler = ^(NSString *activityType, BOOL completed) {
      if (completed) {
            NSLog(@&#34;Selected activity was performed.&#34;);
      } else {
            if (activityType == NULL) {
                NSLog(@&#34;User dismissed the view controller without making a selection.&#34;);
            } else {
                NSLog(@&#34;Activity was not performed.&#34;);
            }
      }

      NSString *result = completed ? @&#34;success&#34; : @&#34;fail&#34;;
      if (activityType == NULL) {
            result = @&#34;dismissed&#34;;
      }
    };
    ;
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>好的,通过排除的过程,我终于找到了罪魁祸首:</p>

<p>我有一个自定义的 UISegmentedControl,它带有自定义的文本字体,我手动调整了内容偏移量以使其正确显示。虽然我已经删除了这些行并且分段控件实际上看起来很好。</p>

<p>这是代码(我已经确认是所有三行代码都导致了问题)</p>

<pre><code>    [ setContentPositionAdjustment:UIOffsetMake(4, 0) forSegmentType:UISegmentedControlSegmentLeft barMetrics:UIBarMetricsDefault];
    [ setContentPositionAdjustment:UIOffsetMake(0, 0) forSegmentType:UISegmentedControlSegmentCenter barMetrics:UIBarMetricsDefault];
    [ setContentPositionAdjustment:UIOffsetMake(-4, 0) forSegmentType:UISegmentedControlSegmentRight barMetrics:UIBarMetricsDefault];
</code></pre>

<p>现在,看到在您选择共享选项后弹出的 View 中没有分段控件,我不知道为什么这会导致这个问题。但现在我删除它后它确实有效。</p>

<p>感谢那些试图提供帮助的人。当然,你不可能猜到这是问题所在。任何人一开始就会遇到这个问题的可能性非常低,因为调整内容位置可能相当罕见。</p>

<p>为了调试这个问题,我按照以下步骤操作:</p>

<ol>
<li>我测试了问题是否与我正在设置的 UIActivityViewController 上的属性或我正在共享的事件项有关。它没有。</li>
<li>我测试了 UIActivityViewController 在从我的应用内的不同 ViewController 调用时是否正常工作。它没有。</li>
<li>我用一个按钮制作了一个空白 ViewController ,该按钮会导致通用 UIActivityViewController 在按下条形按钮时显示。我把它作为我的 Root View 。这很有效,因此表明这是一个孤立的问题。</li>
<li>我没有将该 ViewController 作为我的应用程序的根,而是从我的正常主视图中推送它。它不再起作用,因此确定问题可能与我的主要观点有关。</li>
<li>我注释掉了 viewDidLoad、viewDidAppear 和 viewWillAppear 中的所有代码,除了向导航栏添加一个按钮以加载我的共享测试。那行得通。然后我取消注释 viweDidAppear 和 viewWillAppear,仍然有效。所以我取消了对 viewDidLoadblock 的注释,直到我弄清楚问题出在哪里。</li>
</ol>

<p>我学到了什么:对于像这样的奇怪问题(即那些看起来像 iOS 错误或其他东西的问题,但你找不到任何人发布它),你应该在尝试发布堆栈溢出之前花更多时间进行调试。
(我现在应该真的知道这一点了,但要调试的每个新问题都感觉像是这条规则的异常(exception))</p>

<p>如果您知道为什么调整 UISegmentedControl 的内容位置会扰乱 UIActivityViewController 的共享,请在下面评论,即使这些 View 不包含分段控件</p>

<p>谢谢</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UIActivityViewController,事件未完成,共享选项未加载,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/21394435/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/21394435/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UIActivityViewController,事件未完成,共享选项未加载