我希望在Swift 2.x中这样做: 假设我在文本字段中输入文本。 - ' Apple iPhone http://www.apple.com'
我现在正在使用标签更新UIButton - Apple iPhone。当点击按钮启动' http://www.apple.com时,我想要IBAction。
我可以设置它,但我遇到麻烦的部分是 - 我如何解析Apple iPhone'和' http://www.apple.com'从文本字段中分离它们以便我可以用一些文本更新UIButton标签并使用URL来启动Safari?更具体地说,我希望能够检测到任何文本'然后是' http://',并始终使用文本更新标签,http使用网址启动浏览器。 谢谢你回答。
答案 0 :(得分:6)
我在下面提到了这个问题的简单解决方案
var x = "Apple iPhone http://www.apple.com"
@IBAction func click(_ sender: UIButton) {
let url = x.substring(from: x.range(of: "http")!.lowerBound)
UIApplication.shared.openURL(NSURL(string: url)! as URL)
}
但是这个解决方案和所有给定的解决方案都存在问题,
如果您有这样的字符串:var x = "Apple iPhone http://www.apple.com wwdc"
您无法获得正确的结果。
通用解决方案可以是这样的:
@IBAction func click(_ sender: UIButton) {
var text = "Apple iPhone http://www.apple.com wwwdc"
let startIndex = text.range(of: "http")?.lowerBound
var startString = text.substring(from: startIndex!)
let endIndex = startString.range(of: " ")!.lowerBound
var url = startString.substring(to: endIndex)
UIApplication.shared.openURL(NSURL(string: url)! as URL)
}
它会正确提取网址。
答案 1 :(得分:2)
您可以使用datadetactor在字符串上找到网址,试试这个
let types: NSTextCheckingType = .Link
let detector = try? NSDataDetector(types: types.rawValue)
let matches = detector!.matchesInString("your_string", options: .ReportCompletion, range: NSMakeRange(0,ActivityText!.characters.count))
if matches.count > 0 {
let urlResult = matches.first
let url = urlResult?.URL
//now open this url
}
答案 2 :(得分:2)
您需要使用
来自基础框架的componentsSeparatedByString方法。
它返回一个字符串数组。
let array = inputField.text.componentsSeparatedByString("http://")
在您的情况下,它将在数组中有2个对象。第一个是标签文本,第二个是你想在webView中打开的URL。
if array.count>=2 {
let text = array[0]
let url = array[1]
}