如何检查PKAddPassesViewController中是否按下了取消或添加按钮

时间:2012-12-28 11:08:11

标签: ios6 passbook

默认情况下,传递将加载到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);

5 个答案:

答案 0 :(得分:5)

据我所知,没有,但您可以随时尝试检索刚刚添加的通行证:

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

如果没有,这将返回通行证,否则返回零通知 - 这有助于推断是否添加了新通行证。

请注意,除了添加之外,右键可以显示“更新”(如果传递已存在,但您的版本有新数据),或者如果您尝试重新添加重复传递则禁用。 / p>

答案 1 :(得分:4)

我用另一种方法来解决上述问题。 我在比较没有。用户点击添加或取消按钮后,已存在于存折中的传递带有新传递计数。如果传递计数增加 这意味着传递已被添加到存折,否则不会。

- (void)addPassesViewControllerDidFinish:(PKAddPassesViewController *)控制器 {

PKPassLibrary* passLib = [[PKPassLibrary alloc] init];


NSArray * passArray = [passLib passes];

int currentPasses=[passArray count];

//这里prevPasses是Passbook中已经存在的传递。你可以在 - //(void)viewDidLoad方法中初始化它

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

else
{

NSLog(@"Cancel Button Clicked"); 

}

}

//但是在更新同一个传递的情况下,传递计数不会增加导致执行else部分//是否要点击取消或升级按钮。所以你需要为//跟踪提供一些额外的逻辑它

答案 2 :(得分: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];

}

谢谢

答案 3 :(得分:0)

Karthikeyan's答案的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)
    }
}

答案 4 :(得分:0)

斯威夫特 5.2

pass的修改日期会在添加或再次添加时更新 您可以获取修改日期,然后将其与当前日期进行比较

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
}