我正在使用ABNewPersonViewController
。
我将“ABNewPersonViewController”的“完成”按钮(rightBarButtonItem
of ABNewPersonViewController
)保存到另一个按钮,以便委托(delegate)方法
- (void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person
在按下完成按钮之前不会被调用。我的 viewDidLoad
方法如下
- (void)viewDidLoad {
[super viewDidLoad];
self.defaultRightBarButtonItem = self.navigationItem.rightBarButtonItem;
UIBarButtonItem *saveBtn = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemSave
target:self
action:@selector(actionSave:)];
self.navigationItem.rightBarButtonItem = saveBtn;
[saveBtn release];
}
在另一个 View 中单击按钮时,我触发完成按钮操作
[self.defaultRightBarButtonItem.target
performSelector:self.defaultRightBarButtonItem.action
withObject:self.defaultRightBarButtonItem.target];
有时该方法会被调用,有时则不起作用。 如果我只是编辑联系人的电子邮件地址字段或电话号码字段并尝试保存它,则会调用该方法。但是,如果我尝试编辑地址字段然后保存,则不会调用该方法。这可能是什么原因。
编辑:发现加载新 View 时不会触发委托(delegate)方法。仅当国家/地区、铃声等字段被编辑时才会发生这种情况(加载新 View )。那是委托(delegate)方法没有被触发的时候。在所有其他情况下,都会触发委托(delegate)方法。现在有什么建议吗?
最佳答案
performSelector
相当于调用它所发送到的对象的方法。如果执行进入“在另一个 View 中单击按钮”处理程序并执行
[self.defaultRightBarButtonItem.target
performSelector:self.defaultRightBarButtonItem.action
withObject:self.defaultRightBarButtonItem.target];
代码,但反过来它永远不会进入操作中定义的选择器,只有以下情况是可能的:
self.defaultRightBarButtonItem
或self.defaultRightBarButtonItem.target
为nil
self.defaultRightBarButtonItem.action
为nil
尝试直接调用 actionSave:
方法并记录上面的所有字段,而不是 performSelector
。
关于iphone - 触发按钮操作时不会调用 ABNewPersonViewController 委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9741339/