7

デフォルトでは、パスはにロードされPKAddPassesViewControllerます。ビューでどのボタンが押されているかを知る方法はありますか?

//this method runs when user either click on the cancel or add button

-(void)addPassesViewControllerDidFinish: (PKAddPassesViewController*) controller
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

で押されたボタンのタイトルを取得したいPKAddPassesViewController。タイトルにアクセスするために以下のコードを試しましたが、取得していnullます。

NSLog(@"Title of button    %@",controller.navigationController.navigationItem.rightBarButtonItem.title);
4

5 に答える 5

6

私の知る限りではありませんが、追加したばかりのパスをいつでも取得してみてください。

- (PKPass *)passWithPassTypeIdentifier:(NSString *)identifierserialNumber:(NSString *)serialNumber;

これにより、パスが追加された場合はパスが返され、追加されなかった場合はnilが返されます。これは、新しいパスが追加されたかどうかを推測するのに役立ちます。

追加するだけでなく、右ボタンに「更新」(パスがすでに存在するが、バージョンに新しいデータがある場合)が表示されているか、重複するパスを再度追加しようとしている場合は無効になっている可能性があることに注意してください。

于 2013-01-02T07:28:05.650 に答える
4

私は上記の問題を解決するために別のアプローチを使用しました。私はいいえを比較しています。ユーザーが追加またはキャンセルボタンのいずれかをクリックした後、新しいパスカウントですでに通帳に存在するパスの数。パスカウントが増加した場合、それ以外の場合はパスが通帳に追加されたことを意味します。

-(void)addPassesViewControllerDidFinish: (PKAddPassesViewController*) controller{
    PKPassLibrary* passLib = [[PKPassLibrary alloc] init];
    NSArray * passArray = [passLib passes];

    int currentPasses=[passArray count];
    //Here prevPasses are passes already present in the Passbook.You can 
    //initialise it in -(void)viewDidLoad method

    if(currentPasses>prevPasses){
      NSLog(@"Pass Has Been successfully Added");    
    }else{
      NSLog(@"Cancel Button Clicked"); 
    }
 }

//ただし、同じパスを更新する場合、パスカウントは増加せず、//キャンセルボタンまたはアップグレードボタンのどちらを押しても、// else部分が実行されます。したがって、//それを追跡するための追加のロジックを提供する必要があります。

于 2013-01-03T04:16:53.213 に答える
3

これを試して 、

-(void) addPassesViewControllerDidFinish:(PKAddPassesViewController *)controller {

    if (self.HKPass) {
        PKPassLibrary *pkLibrary = [[PKPassLibrary alloc] init];
        if ([pkLibrary containsPass:self.HKPass]) 
                // add or update clicked
        else 
           // Cancel Clicked   

    }
    [controller dismissModalViewControllerAnimated:YES];

}

ありがとう

于 2013-03-02T13:46:32.983 に答える
2

Karthikeyanの答えのSwift.4バージョン。

PKAddPassesViewControllerのデリゲートを設定することを忘れないでください。

func addPassesViewControllerDidFinish(_ controller: PKAddPassesViewController) {
    let passLib = PKPassLibrary()

    // Get your pass
    guard let pass = self.pass else { return }

    if passLib.containsPass(pass) {
        // Add button pressed

        // Show alert message for example
        let alertController = UIAlertController(title: "", message: "Successfully added to Wallet", preferredStyle: .alert)

        alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: { _ in
            controller.dismiss(animated: true, completion: nil)
        }))

        controller.show(alertController, sender: nil)

    } else {
        // Cancel button pressed
        controller.dismiss(animated: true, completion: nil)
    }
}
于 2019-03-27T07:45:50.590 に答える
0

Swift 5.2

パスのmodifiedDateは、追加または再度追加されると更新されます。modifiedDateを取得して、現在の日付と比較できます。

let pkl:PKPassLibrary = PKPassLibrary()
// get the pass to check from the wallet
if let pass = pkl.pass(withPassTypeIdentifier: "pass.com.example.yourapp", serialNumber: "serialNumber"){
  // get the modified date
  if let modifiedDate = pass.value(forKey: "modifiedDate") as? Date{
    let result = modifiedDate.distance(to: Date())
    // check if the modified date is within an interval
    if result.isLess(than: 2){
      // add is pressed
    }else{
      // cancel is pressed
    }
  }
}else{
    // cancel is pressed
}
于 2021-06-29T06:28:43.207 に答える