在 SDK 中实现自定义取消按钮
Posted
技术标签:
【中文标题】在 SDK 中实现自定义取消按钮【英文标题】:Implement custom Cancel Button in a SDK 【发布时间】:2015-11-09 17:24:08 【问题描述】:我想用paysbuy
SDK实现支付功能....问题是它没有任何cancel
选项,以便用户可以在支付成功后取消关闭操作。
默认情况下,SDK 提供了一种打开默认WebView
的方法,覆盖了整个屏幕。并且没有任何cancel
选项。
我只想通过在特定的view
..或viewcontroller
上加载付款来添加一个cancel
按钮。我尝试在container
视图中使用..加载container
中的视图查看和container
视图外的cancel
按钮,但是当我尝试此过程时,它默认以全屏显示WebView
。还尝试创建PopUP
但没有成功
那么,我如何将SDK
的webview
加载到我的view
的特定部分,以便我可以放置一个Cancel
按钮??
这是sdk提供的启动服务的方法
- (void) callServiceWithCurrentView :(UIViewController *) currentViewController
invoice:(NSString *)invoice
item:(NSString *)item
amount:(NSString *)amount
paypal_amount:(NSString *)paypal_amount
transferMethod:(NSString *)transferMethod
customerLanguage:(NSString *)customerLanguage
operator_name:(NSString *)operator_name
operator_email:(NSString *)operator_email
operator_mobile:(NSString *)operator_mobile
operator_address:(NSString *)operator_address
operator_detail:(NSString *)operator_detail;
在这里我们可以看到callServiceWithCurrentView
方法将目标显示为currentviewcontroller
,所以我认为它在viewcontroller
上默认以full screen
模式加载....
这是我在 swift 中的实现方式
paysBuy?.callServiceWithCurrentView(self, invoice: "343434343", item: "App Fee", amount: "10", paypal_amount: "1", transferMethod: "1", customerLanguage: "E", operator_name: "PAYSBUY", operator_email: "abc@paysbuy.com", operator_mobile: "0888888888", operator_address: "PAYSBUY.COM", operator_detail: "PAYMENT")
还有一个委托方法,在成功或失败的情况下处理响应
extension PaysBuyHelper:PaysbuySDKDelegate
func responseWithResult(result: String!, andInvoice invoice: String!)
//here is the response of the payement
println(result)
println(invoice)
if result == "00"
println("transaction complete and below is the invoice number")
println(invoice)
else if result == "90"
println("transaction incomplete information")
这是我所做的工作......https://drive.google.com/file/d/0Bzk4QVQhnqKmVno5NGdPUV9ITkE/view?usp=sharing
【问题讨论】:
您无法在 webview 上添加取消按钮,因为您无法控制它,我认为解决此问题的一个解决方案是您必须在函数并尝试将第二个 UIViewController 设为高度较小或类似的弹出窗口 @VarunNaharia 问题似乎是正在使用的 SDK 替换了根控制器。因此,当它接管时,无法控制屏幕上的内容。 @VarunNaharia 我试着按照你说的做,但效果不好......它显示我默认全屏......尝试在弹出窗口,容器视图上使用,正如 rory 在答案中所说......但是它们都不起作用 试试这个***.com/questions/17758420/… 并尝试在每个视图顶部制作一个按钮 我已经尝试过使用容器视图... 【参考方案1】:模态控制器在控制器的框架上下文中呈现,该控制器被认为定义了呈现上下文。
您可以选择让调用callServiceWithCurrentView
的控制器为任何模态演示定义上下文,然后可以使用该上下文来限制屏幕上使用的区域。
您可以在 XCode 中通过单击呈现控制器并选择“定义上下文”复选框来执行此操作。在代码中,您可以将definesPresentationContext
设置为 TRUE。
为了对您有用,您需要呈现控制器的框架不是全屏的。理想的情况是这是 UINavigationController 中的控制器。
选项:
1) 您的展示控制器位于带有导航栏的导航控制器内。实际上它是一个子控制器。它使用的屏幕占用空间取决于它是否位于顶部和底部栏下方。
a) 设置您的控制器,使内容不会位于顶部栏下方。这有效地使导航栏下的框架。
b) 当您调用callServiceWithCurrentView
时,在导航栏上添加一个取消按钮。
c) 如果您将控制器设置为正确定义演示上下文,则 UIWebView 应显示在导航栏下方,您可以看到新的取消按钮。
2) 如果不在导航控制器中,那么不要直接调用该方法,而是在您放置取消按钮的子视图中添加一个子控制器。让这个子控制器拨打电话callServiceWithCurrentView
。按照相同的机制,让这个子控制器定义上下文。任何模态 UIWebView 都应该只覆盖子控制器的区域。
希望这能给你一些选择。
【讨论】:
我尝试了第一种方法但不起作用drive.google.com/file/d/0Bzk4QVQhnqKmb04wTTVsT3ZOQUU/… @copeME 我也为您尝试了选项 2,但没有任何乐趣。更深入地看,paysbuy SDK 似乎没有以模态方式呈现,而是似乎完全取代了根控制器。这就是画面变化很快的原因。此外,如果您使用 3D 视图层次结构工具查看,原始控制器不在其后面。遗憾的是,我认为这意味着除了联系 SDK 作者之外,您无能为力。奇怪的是,他们会创建一个 SDK 来移除演示者的所有控制权。看来唯一的退路就是支付 8^)。 是的,我尝试了 3d 视图,但没有看到层次结构....即使用户支付成功,我认为视图不会被驳回..??? @copeME 是的,似乎坏了。您从哪里获得 SDK 代码?我在网上找不到。您需要 callServiceWithCurrentView 的代码或作者的修复。 我给 paysbuy 写了一封电子邮件,他们给我发了 sdk...我也写了一封电子邮件,告诉我如何计算取消选项,但没有回复...以上是关于在 SDK 中实现自定义取消按钮的主要内容,如果未能解决你的问题,请参考以下文章
如何在自定义 Spring 存储库中实现自定义方法? [复制]