我有两个继承自 UIViewController 的 Objective-C 类,并且正在尝试一种不同的方法来学习如何与 iPhone 的通讯录进行交互。Apple 提供的示例假定所有内容都在一个类中,但这不是我需要的方式。我的目标是在选择一个人后关闭地址簿视图。请看一下,让我知道如何在没有 CallerClass 实现 ABPeoplePickerNavigationControllerDelegate 的情况下完成此操作。谢谢!
- 编辑 -
它似乎归结为 [self dismissModalViewControllerAnimated:YES]; 在 CalleeClass.m 中没有任何影响。我似乎仍然无法通过此命令关闭通讯簿。
调用者类.m
#import "CallerClass.h"
@implementation CallerClass
- (IBAction)openAddressBook {
CalleeClass *cc = [[CalleeClass alloc] init];
[self presentModalViewController:[cc doIt] animated:YES];
}
被调用者类.h
#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
@interface CalleeClass : UIViewController <ABPeoplePickerNavigationControllerDelegate> {
NSString *name;
}
-(ABPeoplePickerNavigationController *)doIt;
@property (nontoxic, retain) NSString *name;
@end
被调用者类.m
#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
#import "CalleeClass.h"
@implementation CalleeClass
@synthesize name;
...(默认 ABPeoplePickerNaviationControllerDelegate 实现不在列出的范围内)
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {}
return self;
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
self.name = (NSString *)ABRecordCopyValue(person,kABPersonAddressProperty);
[self dismissModalViewControllerAnimated:YES];
return NO;
}
-(ABPeoplePickerNavigationController *)doIt {
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
return picker;
}
@end