菜鸟教程小白 发表于 2022-12-11 22:08:14

iphone - 触发按钮操作时未调用 ABNewPersonViewController 委托(delegate)方法


                                            <p><p>我正在使用 <code>ABNewPersonViewController</code>。
我将完成按钮(<code>ABNewPersonViewController</code> 的<code>rightBarButtonItem</code>)保存到另一个按钮,以便委托(delegate)方法</p>

<pre><code>- (void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person
</code></pre>

<p>在按下完成按钮之前不会被调用。我的 <code>viewDidLoad</code> 方法是</p>

<pre><code>- (void)viewDidLoad {
;


self.defaultRightBarButtonItem = self.navigationItem.rightBarButtonItem;

UIBarButtonItem *saveBtn = [
                            initWithBarButtonSystemItem:UIBarButtonSystemItemSave
                            target:self
                            action:@selector(actionSave:)];
self.navigationItem.rightBarButtonItem = saveBtn;
;
}
</code></pre>

<p>在另一个 View 中单击按钮我触发完成按钮操作</p>

<pre><code>[self.defaultRightBarButtonItem.target
performSelector:self.defaultRightBarButtonItem.action
withObject:self.defaultRightBarButtonItem.target];
</code></pre>

<p>有时该方法被调用,有时不起作用。
如果我只是编辑联系人的电子邮件地址字段或电话号码字段并尝试保存,则会调用该方法。但是,如果我尝试编辑地址字段然后保存,则不会调用该方法。这可能是什么原因。 </p>

<p>编辑:发现加载新 View 时不会触发委托(delegate)方法。只有在编辑 Country、Ringtone 等字段时才会发生这种情况(加载新 View )。那是没有触发委托(delegate)方法的时候。在所有其他情况下,委托(delegate)方法都会被触发。现在有什么建议吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><code>performSelector</code> 等价于调用要发送到的对象的方法。如果执行进入“按钮单击另一个 View ”处理程序并执行</p>

<pre><code>[self.defaultRightBarButtonItem.target
performSelector:self.defaultRightBarButtonItem.action
withObject:self.defaultRightBarButtonItem.target];
</code></pre>

<p>代码,但反过来它永远不会进入实际定义的选择器,只有以下情况是可能的:</p>

<ul>
<li><code>self.defaultRightBarButtonItem</code> 或 <code>self.defaultRightBarButtonItem.target</code> 为 <code>nil</code></li>
<li><code>self.defaultRightBarButtonItem.action</code> 为 <code>nil</code></li>
</ul>

<p>尝试直接调用 <code>actionSave:</code> 方法而不是 <code>performSelector</code> 并记录上面的所有字段。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 触发按钮操作时未调用 ABNewPersonViewController 委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/9741339/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/9741339/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 触发按钮操作时未调用 ABNewPersonViewController 委托(delegate)方法