サブクラスのサブクラスがABNewPersonViewController
です。わかっているように、ナビゲーションバーの[完了]ボタンをクリックすると、デリゲートメソッドABNewPersonViewControllerの「完了」ボタンを無効にする方法
- (void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person
が呼び出されます。しかし、デリゲートメソッドに入る前に、変更はアドレス帳に保存されます。
私が必要とするのは、保存ボタンが押されるとすぐです。私は彼が行った変更を中止すべきかどうかの変更と
UIView
2とボタン、
- 、
をロードする必要があります。しかし、これは、変更前に行うべきですアドレス帳に反映されます。 UIView
の最初のボタンをクリックするだけで、変更がアドレス帳に保存されるはずです。
2番目のボタンをクリックすると、ビューが消えて、UIView
がロードされているビューコントローラクラスに戻ります。
私の質問は、変更が、私は、カスタムの保存ボタン上のボタン
UIBarButtonItem *okBtn = self.navigationItem.rightBarButtonItem;
UIBarButtonItem *saveBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:okBtn.target action:okBtn.action];
self.navigationItem.rightBarButtonItem =saveBtn;
[saveBtn release];
保存作成した
アドレス帳に反映される前に、私は、ボタンのクリックを保存上のビューをロードする方法であり、アクション、コントロールはデリゲートメソッド
- (void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person` .
に行く私がコントロールは私が前に私のUIView
をロードすることができ、私のカスタムメソッド、に行きたいです編集内容はアドレス帳に保存されます。
編集:私は強い参照を含める必要がありますどこ 私はABNewPersonViewController
ABPersonViewController *displayVcardViewController = (ABPersonViewController*)[self.navigationController visibleViewController];
ABRecordRef person = displayVcardViewController.displayedPerson;
EditAddressNewPersonDetailViewController *newVCardViewController = [[EditAddressNewPersonDetailViewController alloc] init];
newVCardViewController.displayedPerson = person;
newVCardViewController.newPersonViewDelegate = self;
newVCardViewController.isEditingMode = YES;
[self.navigationController setToolbarHidden:YES];
[self.navigationController pushViewController:newVCardViewController animated:YES];
[newVCardViewController release];
をロードすでにさもなければ、この強力なリファレンスではありません。
- (void)actionSave:(UIBarButtonItem *)sender {
if([[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]) {
[self.myView setFrame:CGRectMake(0, 0, 320, 480)];
[[UIApplication sharedApplication].keyWindow addSubview:self.myView];
UIActionSheet * action = [[UIActionSheet alloc]initWithTitle:@""
delegate:self
cancelButtonTitle:@"Do"
destructiveButtonTitle:@"Cancel"
otherButtonTitles: nil];
action.tag = 101;
[action showInView:self.view];
[action release];
}
}
で
は、私はそれ以上のUIAlertView
とUIView
をロードしています。
私は保存ボタンをトリガするわけではありません' - (void)actionSave:(UIBarButtonItem *)sender'メソッドの中にあるアクションです。代わりに、別のビューにボタンをロードしています。また、ビュー内のいずれかのボタンをクリックすると、別のビューがロードされます。このビューのボタンをクリックすると、保存ボタンの操作をトリガする必要があります。私がこれをするとき、完了したボタンは割り当てが解除されます。それは私が直面している問題です。 –
あなたは、(ABNewPersonViewControllerの)インスタンスへの強力な(保持された)参照を必要に応じてどこかに置いて、コントローラの割り当てを解除しないようにしましたか? – Jilouc
質問を編集しました –