无法从 Swift 中的警报视图打开 QR url
can't open QR url from an alert view in Swift
我正在尝试使用 Swift 从 QR 打开 URL,但我无法使用代码来执行此操作。我试过这个功能代码:
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
if metadataObjects == nil || metadataObjects.count == 0 {
vwQRCode?.frame = CGRectZero
return
}
let objMetadataMachineReadableCodeObject = metadataObjects[0] as! AVMetadataMachineReadableCodeObject
if objMetadataMachineReadableCodeObject.type == AVMetadataObjectTypeQRCode {
let objBarCode = objCaptureVideoPreviewLayer?.transformedMetadataObjectForMetadataObject(objMetadataMachineReadableCodeObject as AVMetadataMachineReadableCodeObject) as! AVMetadataMachineReadableCodeObject
vwQRCode?.frame = objBarCode.bounds;
if objMetadataMachineReadableCodeObject.stringValue != nil {
let alert = UIAlertController(title: "Se ha detectado QR", message: objMetadataMachineReadableCodeObject.stringValue, preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Abrir Link", style: UIAlertActionStyle.Default, handler: //nil))
{action in
//UIApplication.sharedApplication().openURL(NSURL(string: "http://www.google.cl")!)
UIApplication.sharedApplication().openURL(NSURL(fileURLWithPath: objMetadataMachineReadableCodeObject.stringValue))
}))
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
}
}
}
但是当我点击 alertView 中的按钮时什么也不做。
然后我尝试使用 google URL 并打开没有问题。
请有人帮助我!
没有任何反应,因为系统无法处理结果 URL。您应该先检查此功能:
let url = NSURL(fileURLWithPath: objMetadataMachineReadableCodeObject.stringValue)
if UIApplication.sharedApplication().canOpenURL(url) {
UIApplication.sharedApplication().openURL(url)
}
您的 QR 码是否真的指向文件 URL 或网页 link?
您的代码似乎工作正常。尝试做一个简单的:
print(objMetadataMachineReadableCodeObject.stringValue)
并查看 returns 是什么,因为它表明这就是您的问题所在。您的 QR 码可能包含一些引号?
好的。我终于做到了。
我只是将 "fileURLWithPath" 更改为 "string"
之前
UIApplication.sharedApplication().openURL(NSURL(fileURLWithPath: objMetadataMachineReadableCodeObject.stringValue))
之后
UIApplication.sharedApplication().openURL(NSURL(string: objMetadataMachineReadableCodeObject.stringValue)!)
现在 iOS10 中的 Swift3 已弃用 openURL,但如果您将 "openURL" 更改为 "open" 则效果很好。
UIApplication.sharedApplication().open(NSURL(string: objMetadataMachineReadableCodeObject.stringValue)!)
我正在尝试使用 Swift 从 QR 打开 URL,但我无法使用代码来执行此操作。我试过这个功能代码:
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
if metadataObjects == nil || metadataObjects.count == 0 {
vwQRCode?.frame = CGRectZero
return
}
let objMetadataMachineReadableCodeObject = metadataObjects[0] as! AVMetadataMachineReadableCodeObject
if objMetadataMachineReadableCodeObject.type == AVMetadataObjectTypeQRCode {
let objBarCode = objCaptureVideoPreviewLayer?.transformedMetadataObjectForMetadataObject(objMetadataMachineReadableCodeObject as AVMetadataMachineReadableCodeObject) as! AVMetadataMachineReadableCodeObject
vwQRCode?.frame = objBarCode.bounds;
if objMetadataMachineReadableCodeObject.stringValue != nil {
let alert = UIAlertController(title: "Se ha detectado QR", message: objMetadataMachineReadableCodeObject.stringValue, preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Abrir Link", style: UIAlertActionStyle.Default, handler: //nil))
{action in
//UIApplication.sharedApplication().openURL(NSURL(string: "http://www.google.cl")!)
UIApplication.sharedApplication().openURL(NSURL(fileURLWithPath: objMetadataMachineReadableCodeObject.stringValue))
}))
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
}
}
}
但是当我点击 alertView 中的按钮时什么也不做。 然后我尝试使用 google URL 并打开没有问题。 请有人帮助我!
没有任何反应,因为系统无法处理结果 URL。您应该先检查此功能:
let url = NSURL(fileURLWithPath: objMetadataMachineReadableCodeObject.stringValue)
if UIApplication.sharedApplication().canOpenURL(url) {
UIApplication.sharedApplication().openURL(url)
}
您的 QR 码是否真的指向文件 URL 或网页 link?
您的代码似乎工作正常。尝试做一个简单的:
print(objMetadataMachineReadableCodeObject.stringValue)
并查看 returns 是什么,因为它表明这就是您的问题所在。您的 QR 码可能包含一些引号?
好的。我终于做到了。 我只是将 "fileURLWithPath" 更改为 "string"
之前
UIApplication.sharedApplication().openURL(NSURL(fileURLWithPath: objMetadataMachineReadableCodeObject.stringValue))
之后
UIApplication.sharedApplication().openURL(NSURL(string: objMetadataMachineReadableCodeObject.stringValue)!)
现在 iOS10 中的 Swift3 已弃用 openURL,但如果您将 "openURL" 更改为 "open" 则效果很好。
UIApplication.sharedApplication().open(NSURL(string: objMetadataMachineReadableCodeObject.stringValue)!)