1

私はいたるところを見てきましたが、おそらく誰かが私を正しい方向に向けることができることを願っています.

ユーザーが別のレコードを選択するたびにメソッドを実行したいだけです。

全体像 (代替方法がある場合) は、ユーザーがレコードを選択 (シングルクリック) すると、個人の電話番号がセグメント化されたコントロールに入れられることです。

私はもう試した:

  1. アクションをボタンに接続するには、通常、アシスタント エディターを開き、右クリックして .h ファイルにドラッグします。しかし、この abpeoplepickerview でそれをやっていると、アウトレット接続タイプしか取得できませんか?
4

2 に答える 2

0

ピープル ピッカーは . テーブルビュー、2 つのボタン、および検索フィールド (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]);
} 
于 2013-01-01T13:50:47.707 に答える
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
}

ウィンドウを閉じる場合は、オブザーバーを削除することを忘れないでください。

于 2014-05-30T17:37:21.997 に答える