3

私は少し問題を抱えています-

(ところで 、連絡先を選択した後、モーダルビューコントローラーを表示するにはどうすればよいですか? が、役に立ちませんでした)

基本的に、ユーザーが--peoplePickerNavigationControllerを使用して連絡先を選択できるようにします。選択後、personRefデータを使用するModalViewControllerを提示します。「人を追加」メソッドが呼び出されているのがわかりますが、iPhoneにビューが表示されません。

更新-DismissdismissModalViewControllerAnimatedと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];
}

どうもありがとうございます。

4

3 に答える 3

3

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

Apple Docsから:

dismissModalViewControllerAnimated:…複数のモーダルビューコントローラーを連続して提示し、モーダルビューコントローラーのスタックを構築する場合、スタックの下位のビューコントローラーでこのメソッドを呼び出すと、その直接の子ビューコントローラーとスタック上のその子の上のすべてのビューコントローラーが閉じられます。これが発生すると、最上部のビューのみがアニメーション化されて閉じられます。中間のViewControllerは、スタックから削除されるだけです。

于 2011-02-03T18:51:43.487 に答える
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:^{

        }];

    }];

}
于 2015-06-29T12:53:39.010 に答える
0

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

于 2011-02-02T11:03:17.357 に答える