представить viewController после того, как контакт был выбран в peoplePickerNavigationController? - PullRequest
3 голосов
/ 25 января 2011

У меня небольшая проблема -

(Кстати, я смотрел на Как я могу представить контроллер модального вида после выбора контакта? , но это не помогло мне)

По сути, я хочу позволить пользователю выбрать контакт, используя - peoplePickerNavigationController.после выбора я хочу представитьModalViewController, который будет использовать данные personRef.я вижу, что вызывается метод «добавить человека», но iphone не отображает представление.

ОБНОВЛЕНИЕ - Это работает, если я отменяю анимацию в Dismiss 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 ]

3 голосов
/ 03 февраля 2011

Только не отмахивайтесь от сборщика людей и не представляйте ваш контроллер модально поверх него.Если впоследствии вы в какой-то момент отклоните свой контроллер, вместо этого отмените средство выбора людей (от вызывающего абонента / родителя), и ваш ViewController также будет отклонен.

Из документов Apple:

dismissModalViewControllerAnimated:… Если вы представляете несколько контроллеров модальных представлений подряд и таким образом строите стек контроллеров модальных представлений, вызов этого метода на контроллере представлений, расположенном ниже в стеке, отменяет его непосредственный дочерний контроллер представлений и все контроллеры представлений выше этого потомка в стеке.Когда это происходит, только самый верхний вид отклоняется в анимационном режиме;любые промежуточные контроллеры представления просто удаляются из стека.

2 голосов
/ 29 июня 2015

Хотя, выбирая человека, сборщик отклоняет его, ключ в том, чтобы самому удалить его в обратном вызове делегата, после выбора человека и затем представить своего контроллера

- (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 голосов
/ 02 февраля 2011

Полагаю, вам просто нужно подождать, пока сборщик людей не исчезнет, ​​завершив анимацию, которую он указывает, вызвав viewDidDisappear. Если вы переопределите и подключитесь, вы должны сохранить свой модальный контроллер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...