1

ABPeoplePickerNavigationControllerをユーザーに提示し、連絡先を選択するように依頼しています。ユーザーを選択したら、選択したプロパティに応じて、メッセージアプリまたはメールアプリのいずれかに送信してもらいたいと思います。ただし、モーダルピッカーが閉じられた後に発生するアクションをカスタマイズする方法がわかりません。

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
    if(property == kABPersonPhoneProperty){
        [self dismissModalViewControllerAnimated:YES];
        NSString* phoneNumber = (NSString *)ABRecordCopyValue(person, property);
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"sms:%@", phoneNumber]];
        [[UIApplication sharedApplication] openURL:url];
        [phoneNumber release];
        return NO;
    }

    if(property == kABPersonEmailProperty){
        [self dismissModalViewControllerAnimated:YES];
        NSString* emailAddress = (NSString *)ABRecordCopyValue(person, property);
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"mailto:%@", emailAddress]];
        [[UIApplication sharedApplication] openURL:url];
        [emailAddress release];
        return NO;
    }
    return YES;
}

だから、どうすればこれを行うことができますか?ありがとう!

4

4 に答える 4

2

デリゲートメソッドを実装するだけです

   - (BOOL)personViewController:(ABPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifierForValue

実装では、単に YES を返します (選択したプロパティを処理する必要がない場合)。次に、ユーザーが電話番号に触れると、アプリはその電話番号に電話をかけ始めます。同様に、ユーザーがメール アドレスに触れると、yout アプリはデフォルトの作成メール ビューに切り替わります。

自分自身をデリゲートとして割り当てることを忘れないでください。そうしないと、メソッドが呼び出されません。

ABPeoplePickerNavigationController *peoplePicker = [[ABPeoplePickerNavigationController alloc] init];
peoplePicker.peoplePickerDelegate = self;
[self presentModalViewController:peoplePicker animated:YES];

最後に、コントローラーのヘッダー ファイルのプロトコル セクションに ABPeoplePickerNavigationControllerDelegate を配置します。

注: シミュレーターではなく、デバイスでこれをテストする必要があります。

于 2009-06-05T11:12:42.933 に答える
0

解決しました。問題はデリゲートメソッドではありませんでした。私が作成しているNSURLが無効であるということでした。選択した電話番号でSMS/メッセージングアプリを起動するには、ユーザーsms:// ... //が重要です!ドキュメントはsms:を正しい形式として示しているようですが、それは正しくないことがわかりました。

于 2009-06-05T17:44:57.947 に答える
0

2 つのメソッド (pickedPhone とpickedMail など) を持つカスタム プロトコルを作成し、このメソッドを呼び出すクラスにこれらのルーチンを実装させ、それ自体をデリゲートとして割り当てることができます。決定が下されたら、デリゲートが定義されているかどうかを確認し、適切なメソッドを呼び出して、呼び出し元に処理を任せます。

また、「sms」URL でいくつかのテストを行う必要があります。最後に、SMS アプリを実行していることを確認しましたが、何も渡していません。

しかし、そこにたどり着く前に、これらの openURL を呼び出して外部の電話アプリまたは電子メール アプリを呼び出す現在の方法では、アプリが停止され、制御がそれらのアプリに移されます。したがって、アプリが存在しなくなるため、ユーザーがモーダル ピッカーを閉じた後に何が起こるかを気にする理由がわかりません。

現在、OS 3.0 ではいくつかのオプションがあるかもしれませんが、それでも... 問題を再考する必要があるかもしれません。

于 2009-06-05T06:03:13.500 に答える
0

NO/FALSE/false を返すだけです

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person
                                property:(ABPropertyID)property
                              identifier:(ABMultiValueIdentifier)identifier

接触処理のために同じ関数内にコードを記述します

于 2012-01-13T09:45:00.110 に答える