2013-09-30 25 views
13

Appleは、包括的で小さな例 "QuickContacts"(developer.apple.com/library/IOs/samplecode/QuickContacts/Introduction/Intro.html)を使用して、Address Book UI Frameworkの基本的な使用法を概説しています。 - ダウンロード可能なソースコードは、あなたのアドレス帳に「Appleseed」という名前の人物を追加するか、(QuickContactsViewController.mの)246行目の人名をあなたのアドレス帳にすでに存在するものに変更してください。iOS7 - ABPersonViewController、編集モード

質問:我々はABPersonViewController "picker"が編集モードに既にあるような方法で機能-(void)showPersonViewController機能を変更するにはどうすればよい navigationControllerの上にプッシュされた後に(それが開いたときに、(とeditingButton「完了」表示)スタック)。

"7"より前のiOSバージョンでは、挿入するだけのストレートな問題でした。 picker.editing = YES;をクリックしてから、nav-stackにピッカーを押し込んで、編集モードで表示されるようにします(後のコードを参照)。

iOS7ではこれはもう動作しません。

これはiOS7のバグですか?その場合、簡単な回避策がありますか(たとえばABPersonViewControllerクラスをリバースエンジニアリングするのではなく)ですか? - あるいは、最近は別々にコード化する必要がありますか?

コメントをお待ちしています。あなたが代わりにABPersonViewControllerのABNewPersonViewControllerを使用することができます

-(void)showPersonViewController 
{ 
    // Search for the person named "Appleseed" in the address book 
    NSArray *people = (NSArray *)CFBridgingRelease(ABAddressBookCopyPeopleWithName(self.addressBook, CFSTR("Appleseed"))); 
    // Display "Appleseed" information if found in the address book 
    if ((people != nil) && [people count]) 
    { 
     ABRecordRef person = (__bridge ABRecordRef)[people objectAtIndex:0]; 
     ABPersonViewController *picker = [[ABPersonViewController alloc] init]; 
     picker.personViewDelegate = self; 
     picker.displayedPerson = person; 
     // Allow users to edit the person’s information 
     picker.allowsEditing = YES; 

     picker.editing = YES; // in iOS6 this works, in iOS7 it does not 

     [self.navigationController pushViewController:picker animated:YES]; 
    } 
    ... 
    ... 
} 
+1

これはiOSの7、より高い優先順位の修正が割り当てられますことを報告し、より人々のバグです。 http://bugreport.apple.com –

+0

@ Tommie C. - そうです、Appleはバグだと確認しました。 - ご意見ありがとうございます。 – user2831473

+0

これはまだ修正されていないようですね?? – SAHM

答えて

10

、ベローズはコードです:

ABNewPersonViewController *picker = [[[ABNewPersonViewController alloc] init] autorelease]; 
picker.newPersonViewDelegate = self; 
picker.displayedPerson = person; 
[email protected]"edit contact"; 

[self.navigationController pushViewController:picker animated:YES]; 
+1

プロトコルメソッドで - (void)newPersonViewController:didCompleteWithNewPerson:ABRecordRef personはNULL(ユーザーが編集をキャンセルする場合)または元の値(picker.displayedPerson = person;で初期化されます) – Vyacheslav

+0

life saver !!!!!どうもありがとう! – xialin

関連する問題