두 개의 Objective-C 클래스가 UIViewController에서 상속되며 iPhone의 주소록과 상호 작용하는 방법을 배우는 데있어 다른 접근 방식을 시도하고 있습니다. Apple이 제공하는 example은 모든 것이 하나의 클래스에 있다고 가정합니다. 그러나 이것이 필요한 방식은 아닙니다. 내 목표는 사람이 선택되면 주소록보기를 닫는 것입니다. 봐 주시고 CallerClass에 ABPeoplePickerNavigationControllerDelegate를 구현시키지 않고도이 작업을 수행 할 수있는 방법을 알려주십시오. 감사!Objective-C 주소록
- 편집 -
이 아래로 비등 할 것으로 보인다 무엇 인 [자기 dismissModalViewControllerAnimated : YES]; CalleeClass.m에는 아무런 영향이 없습니다. 나는 여전히이 명령으로 주소록을 닫을 수있는 반응을 얻지 못하는 것 같습니다.
는 CallerClass.m
#import "CallerClass.h"
@implementation CallerClass
- (IBAction)openAddressBook {
CalleeClass *cc = [[CalleeClass alloc] init];
[self presentModalViewController:[cc doIt] animated:YES];
}
CalleeClass.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
CalleeClass.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
. doIt 메서드에서 CalleeClass를 대리자로 설정하면 CallerClass는 이미 AB 대리자가 아닙니다. – pxl
pxl, 나는 이것을 알고있다. 이를 달성하기위한 한 가지 해결책은 호출자 클래스의 모든 대리자 메서드를 래핑하고 호출 수신자를 완전히 없애는 것입니다.하지만 원하는 것은 아닙니다. 따라서 두 클래스를 사용하여 인스턴스를 만들고 액세스 할 수있는 솔루션을 찾고 있습니다. 주소록 항목.내가 말한 것은 "호출자를 대리인으로 지정하면됩니다.하지만 필요한 것은 호출 수신자가 대행자 일 것입니다. 여기서는 호출 수신자를 대리인으로 지정하고 작동하지 않게하는 방법이 있습니다. 내가 이것을 고쳐 줄까요? " 감사! –