我有一个子类ABNewPersonViewController
的类。据我所知,当单击导航栏中的“完成”按钮时,委托方法
- (void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person
被调用。但在进入委托方法之前,更改将保存到地址簿中。
我需要的是,只要按下保存按钮。我需要加载一个UIView
,其中有2个按钮询问用户,
但是,这应该在地址簿中反映出更改之前完成。只有点击UIView
中的第一个按钮,才能将更改保存在地址簿中。
单击第二个按钮,视图应该消失,我应该返回到加载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];
}
}
我正在加载UIView
UIAlertView
。
答案 0 :(得分:4)
更新:从iOS 7.0开始,ABNewPersonViewController
不再是子类,这不起作用。
首先,在覆盖之前保留对默认rightBarButtonItem
的引用。
如果您是ABNewPersonViewController
的子类,那么您的viewDidLoad
将如下所示:
- (void)viewDidLoad {
[super viewDidLoad];
// Store the old button item into a custom property
// @property (nonatomic, retain) UIBarButtonItem *defaultRightBarButtonItem;
self.defaultRightBarButtonItem = self.navigationItem.rightBarButtonItem;
UIBarButtonItem *saveBtn = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemSave
target:self
action:@selector(actionSave:)];
self.navigationItem.rightBarButtonItem = saveBtn;
[saveBtn release];
}
您可以在自定义操作方法中调用默认目标上的默认操作:
- (void)actionSave:(UIBarButtonItem *)sender {
// Do what you want to do before the data is saved
// ....
// ....
// Trigger the default action
[self.defaultRightBarButtonItem.target
performSelector:self.defaultRightBarButtonItem.action
withObject:self.defaultRightBarButtonItem.target];
}