2013-01-01 1 views
1

나는 어디에서나 보았으며 누군가가 올바른 방향으로 나를 가리킬 수 있기를 바랍니다.Cocoa : ABPeoplePickerView - 한 번의 클릭으로 메서드를 트리거 할 수 있습니까?

사용자가 다른 레코드를 선택할 때마다 메소드를 실행하기 만하면됩니다.

더 큰 그림 (다른 방법이있는 경우)은 사용자가 레코드 (한 번의 클릭)를 선택하면 사람의 전화 번호가 세그먼트 화 된 컨트롤에 입력된다는 것입니다.

이 나는 ​​시도했다 :

  1. 내가 일반적으로 보조 편집기를 열고 버튼에 동작을 연결하고 .H 파일을 드래그를 마우스 오른쪽 단추로 클릭하십시오. 그러나 내가이 abpeoplepickerview로 그것을 할 때 나는 콘센트 연결 유형을 얻는가?

답변

0

사람 선택 도구는 무엇입니까? 실제로있는 tableview의 consits '화합물보기', 2 개 버튼과 searchfield (IIRC)

대답 : 당신이 운이있어
하고 에 대한하지만 물론 당신은 몇 가지 해킹 할 적합한이 구성 요소의 밤은 :

- (void)viewDidLoad { 
    //you get the internal tableview 
    id views = [self findSubviewsOfKind:NSClassFromString(@"ABPeoplePickerTableView") withTag:NSNotFound inView:sef.peoplePickerView]; 
    id view = [views count] ? [views objectAtIndex:0] : nil; 

    //subscribe to the notification 
    if([view respondsToSelector:@selector(selectedRow)]) { 
     [[NSNotificationCenter defaultCenter] addObserverForName:NSTableViewSelectionDidChangeNotification object:view queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { 
      [self peoplePickerSelectedRecordChanged:self.peoplePickerView]; 
     }]; 
    } 
} 

- (NSArray *)findSubviewsOfKind:(Class)kind withTag:(NSInteger)tag inView:(NSView*)v { 
NSMutableArray *array = [NSMutableArray array]; 
    if(kind==nil || [v isKindOfClass:kind]) { 
     if(tag==NSNotFound || v.tag==tag) { 
      [array addObject:v]; 
     } 
    } 

    for (id subview in v.subviews) { 
     NSArray *vChild = [self findSubviewsOfKind:kind withTag:tag inView:subview]; 
     [array addObjectsFromArray:vChild]; 
    } 

    return array; 
} 

- (IBAction)peoplePickerSelectedRecordChanged:(id)sender { 
    NSLog(@"%@", [sender selectedRecords]); 
} 
+0

답장을 보내 주셔서 감사합니다. 그러나 제공 할 친절한 코드로 무엇을해야할지 모르겠습니다. 나는 obj-c에 n00b이고, 모든 것을 말하게 될 필요가 있다고 가정한다. 현재로서는이 코드가 왜 작동하는지 알 수 없으므로이를 사용하는 방법을 모릅니다. 나는 내가 필요한 것을 알고있다. (단지 사용자가 다른 이름을 클릭 할 때마다 방아쇠를 당기는 void method) ... 당신이 나를 도울 수 있다면 고마워. –

+0

Ok ill는 약간의 설명과 당신의 사랑하는 void method를 오늘 밤 추가한다. :)) –

+0

은 사용하기 쉽도록 대답을 약간 편집했습니다. 'peoplePickerSelectedRecordChanged'는 항목을 선택하면 시작됩니다. –

0

ABPeoplePickerView는 필요한 정보를 정확하게 제공합니다. 수업 참고서의 끝 부분을보세요.

@implementation someController 
@synthesize picker; //your ABPeoplePickerView 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
// or some other method that gets called early on 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self 
       selector:@selector(notificate:) 
       name:ABPeoplePickerNameSelectionDidChangeNotification 
       object:picker]; 
} 

- (void) notificate: (NSNotification*) notification { 
    ABPerson *person = picker.selectedRecords.firstObject; 
    NSLog(@"NOTIFIED %@"), person.name); 
    // name is a property of ABPerson I added in a category 
    // do what you will 
} 

창을 닫으면 관찰자를 삭제해야합니다.

관련 문제