2011-01-25 3 views
3

私は少し問題を抱えています -がviewControllerを表示していますか?

(ちなみに私は How can I present a modal view controller after selecting a contact? に見てきましたが、それは私を助けていませんでし)

を基本的に私は、ユーザーが使用して連絡先を選択できるようにしたい - peoplePickerNavigationControllerを。選択した後、personRefデータを使用するpresentViewModalViewControllerが必要になります。 「人を追加する」メソッドが呼び出されるのを見ることができますが、iphoneはビューを表示しません。

UPDATE - Dismiss dismissModalViewControllerAnimatedおよびpresentModalViewControllerでアニメーションをキャンセルすると動作しますが、それはかなり醜いです。

これは、ユーザーが連絡先を選択した後に呼び出される関数です -

- (void)addPerson { 
    NSLog(@"@2"); 
    AddViewController *addViewController = [[AddViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
    addViewController.delegate = self; 

    // Create a new managed object context for the new book -- set its persistent store coordinator to the same as that from the fetched results controller's context. 
    NSManagedObjectContext *addingContext = [[NSManagedObjectContext alloc] init]; 
    self.addingManagedObjectContext = addingContext; 
    [addingContext release]; 

    [addingManagedObjectContext setPersistentStoreCoordinator:[[fetchedResultsController managedObjectContext] persistentStoreCoordinator]]; 


    addViewController.person = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:addingContext]; 
    addViewController.hiByeGroupId = [dataSource hibyeGroupId]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:addViewController]; 

    [self.navigationController presentModalViewController:navController animated:YES]; 

    [addViewController release]; 
    [navController release]; 
} 

は、非常にありがとうございました - これはと呼ばれるが、まだビューが提示されていない機能です

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)personRef { 

    TempREcordId = ABRecordGetRecordID(personRef); 

    BOOL hasDeleteDate = [GlobalFunctions CheckToSeeIfInHiBye:TempREcordId]; 

    if (hasDeleteDate) { 
     [GlobalFunctions alert:NSLocalizedString(@"", @"") ]; 
    }else{ 

     [self addCustomValuesAfterSelection]; 
     [self dismissModalViewControllerAnimated:YES]; 
    } 


    return NO; 
} 

多く。

答えて

3

人ピッカーを却下して、コントローラをモーダルの上にモーダル表示しないでください。後であなたのコントローラをいくつかの時点で却下した場合は、代わりに(呼び出し元/親からの)人の選択を却下し、ViewControllerも却下されます。

dismissModalViewControllerAnimated:アップルのドキュメントから

... あなた連続して存在するいくつかのモーダルビューコントローラ、ひいてはがモーダルビューコントローラのスタックを構築する場合、スタック内の下のビューコントローラ上でこのメソッドを呼び出しますその直下の子ビューコントローラと、その子の上のすべてのビューコントローラをスタック上に閉じます。これが起こると、一番上のビューだけがアニメ化されて消滅します。いずれの中間ビューコントローラもスタックから単に除去される。

0

viewDidDisappearを呼び出すことによって示されるアニメーションを終了することによって、ピッカーが消えてしまうまで待つだけでよいとします。オーバーライドしてそこに接続する場合は、保存してモーダルコントローラを提示する必要があります。

+0

おかげで人を選ん後と比べて、私はそれをしようとします。 – shannoga

+0

そして?それは動作しましたか? – Krumelur

+0

こんにちは、遅れて申し訳ありません。それは私のために働かなかった。 – shannoga

2

人を選ぶことによって、ピッカーが退け、キーは、デリゲートのコールバックにそれを自分を却下することですが、あなたのコントローラを提示

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person { 

    [self.navigationController dismissViewControllerAnimated:YES completion:^{ 

     ContactDetailViewController * vc = [[ContactDetailViewController alloc] initWithWithABRecord:person]; 
     vc.delegate = self; 
     UINavigationController * nc = [[UINavigationController alloc] initWithRootViewController:vc]; 
     [self.navigationController presentViewController:nc animated:YES completion:^{ 

     }]; 

    }]; 

} 
+0

これは私が 'peoplePicker.dismissViewControllerAnimated'を使用したことを除いて私にとってはうまくいきました。 –

関連する問題