如何在 IB 中创建 PKPaymentButton?

Posted

技术标签:

【中文标题】如何在 IB 中创建 PKPaymentButton?【英文标题】:How to create PKPaymentButton in IB? 【发布时间】:2016-06-03 12:09:10 【问题描述】:

以下代码来自 WWDC 2015 Session 702 Apple Pay Within Apps - Emporium:Apple Pay 的简单购物体验

    if PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks(ProductTableViewController.supportedNetworks) 

        let button = PKPaymentButton(type: .Buy, style: .Black)
        button.addTarget(self, action: #selector(ProductTableViewController.applePayButtonPressed), forControlEvents: .TouchUpInside)

        button.center = applePayView.center
        button.autoresizingMask = [.FlexibleLeftMargin, .FlexibleRightMargin]
        applePayView.addSubview(button)
    

我想知道我们是否可以在 IB 中创建这个按钮。

【问题讨论】:

只需将您的按钮添加到 PKPaymentButton 的子类 以前的版本支持apple pay,但是不支持这个按钮怎么办?这意味着您将如何在 xib 中初始化一个有条件地子类为 PKPaymentButton 的按钮? 【参考方案1】:

我也在寻找这个,结果证明可以使用 IB 来设置它。 只需在 IB 中创建一个 UIButton,将其类型设置为 PKPaymentButton,现在在 UserDefinedRuntimeAttributes 中根据需要设置“样式”和“类型”,对应于 PKPaymentButtonStyle 和 PKPaymentButtonType。 例如:

type = 1 //corresponding to - PKPaymentButtonTypeBuy
style = 2 //corresponding to - PKPaymentButtonStyleBlack

Example Setup

这就是你最终得到的:

Example Button

PS。有趣的是,您可以在 IB 属性中设置cornerRadius,但正如您所见,它不会影响按钮。似乎即使在代码中设置它也无济于事。因此,如果您不想被矩形 PKPaymentButton 卡住 - 只需将其放在一个视图中,将其圆角并确保在 IB 中打勾 Clip to Bounds(或在代码 yourButtonHolder.clipsToBounds = true 中)

【讨论】:

不要忘记将 PassKit.framework 添加到项目的构建阶段 --> 将二进制文件与库链接。【参考方案2】:

您可以在 Interface Builder 的 Identity Inspector 中更改按钮的类,方法是编辑 Custom Class 字段。此时您为其创建的 outlet 应该是 PKPaymentButton 类型。

【讨论】:

IB如何设置PKPaymentButtonStyle? 你找到方法了吗@chrish 这不是最好的方法。您将无法更改按钮类型或样式。而且默认按钮的外观毫无用处。【参考方案3】:

是的,我们可以使用下面的代码行来设置样式和按钮类型。

applePayButton.setValue(paymentButtonStyle.rawValue, forKey: "style") applePayButton.setValue(2, forKey: "type")

【讨论】:

以上是关于如何在 IB 中创建 PKPaymentButton?的主要内容,如果未能解决你的问题,请参考以下文章

在 IB 中创建的静态 UILabel 显示缓慢

通过代码将标题/图标等设置为在 IB 中创建的 TabBarItem?

如何使用 IB 显示精确大小的按钮?

以编程方式创建视图与 IB 相比的效率

在 matplotlib 中创建一个离散的颜色条

在代码中初始化 UIWebView 后,如何从 IB 确定其定位?