iphone - 如何覆盖 ABNewPersonViewController 中的 "Done"按钮

标签 iphone ios abpersonviewcontroller

我有一个子类 ABNewPersonViewController 的类。据我了解,当单击导航栏中的完成按钮时,委托(delegate)方法

- (void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person 

被调用。但在进入委托(delegate)方法之前,更改将保存到通讯录中。

我需要的是,一旦按下保存按钮。我需要加载一个带有 2 个按钮的 UIView 来询问用户,

  1. 他是否想要改变和
  2. 他是否应该中止所做的更改,

但这应该在地址簿中反射(reflect)更改之前完成。只有点击 UIView 中的第一个按钮,更改才会保存在地址簿中。

单击第二个按钮时, View 应该消失,我应该返回到加载 UIView 的 View Controller 类。

我的问题是,在更改反射(reflect)在地址簿中之前,如何在单击保存按钮时加载 View

我创建了一个自定义保存按钮

UIBarButtonItem *okBtn =  self.navigationItem.rightBarButtonItem;
UIBarButtonItem *saveBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:okBtn.target action:okBtn.action];
self.navigationItem.rightBarButtonItem =saveBtn;
[saveBtn release];

在保存按钮操作上,控件转到委托(delegate)方法

 - (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

最佳答案

更新:从 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];
}

关于iphone - 如何覆盖 ABNewPersonViewController 中的 "Done"按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9480516/

相关文章:

ios - 针对 iPad 和 iPhone 进行测试时颜色不同

objective-c - 释放对象

iOS 7 - 为什么 ABPersonViewController 不显示我个人的所有信息?

iOS 7 - Person ViewController,编辑模式

ios - 无法访问地址簿的 Person ViewController

iphone - 在iOS中滚动立方体效果的tableview单元格?

iphone - 通过循环将 TouchUpInside 事件分配给多个 UIImageView,并使用可以进一步对每个 UIImageView 进行动画/操作的处理程序方法

ios - 带约束的 Swift 圆形按钮

ios - 自定义导航栏项目放置不当

ios - OpenType字体无法在iOS上正确呈现