2011-01-25 56 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:^{ 

     }]; 

    }]; 

} 
相关问题