2011-01-25 68 views
3

我有一個小問題 -在peoplePickerNavigationController中選擇了聯繫人後呈現viewController?

(BTW我已經看過上 How can I present a modal view controller after selecting a contact? 但它沒有幫我)

基本上,我想要讓用戶選擇使用的聯繫人 - peoplePickerNavigationController。選擇後,我想呈現將使用personRef數據的ModalViewController。 我可以看到「添加人員」方法被調用,但iphone不顯示視圖。

更新 -它的作品,如果我取消動畫DismissModalViewControllerAnimated和在presentModalViewController,但它看起來相當醜陋。

這是用戶後調用的函數選擇接觸 -

- (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; 
} 

這就是所謂的功能,但仍然認爲沒有呈現 -

- (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]; 
} 

非常感謝你許多。

回答

3

只要不關閉人員選擇器,並以模態形式呈現您的控制器就可以了。如果您之後在某些時候解散了您的控制器(而不是來自調用者/父級),那麼您的ViewController也將被解僱。

從Apple文檔:

dismissModalViewControllerAnimated:... 如果連續存在幾種模式視圖控制器,從而構建模式視圖控制器的堆棧,調用視圖控制器這種方法在堆棧中較低將其立即子視圖控制器和所有視圖控制器放在堆棧上的那個孩子之上。當發生這種情況時,只有最頂級的觀點纔會以動畫形式被解僱;任何中間視圖控制器都可以簡單地從堆棧中移除。

0

我想你只需要等到人員選擇器消失後,通過完成它的動畫,它表明通過調用viewDidDisappear。如果您覆蓋並掛在那裏,您應該保存以呈現您的模態控制器。

+0

謝謝,我會盡力的。 – shannoga 2011-02-02 12:26:16

+0

而且?它有用嗎? – Krumelur 2011-02-02 22:19:54

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:^{ 

     }]; 

    }]; 

} 
相關問題