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