[英]removal of bridgeToObjective-C means I can't use NSRange
我有一个viewController
,可以在其中输入一些文本到textField
然后点击完成button
将其保存。 我只希望完成的按钮在textField中有文本时可见。 为了做到这一点,我为UITexfield
使用了委托方法,该方法在将要编辑的时候触发,如下所示。 当它传入NSRange
,我不能将其放入stringByReplacingCharactersInRange
因为swift仅允许使用Range。 因此,我NSRange
了桥梁,这使我可以使用给定的NSRange
。 如果您知道将NSRange
为Range的方法,或者甚至更好,如果您知道检查文本字段是否为空的更简洁明了的方法,请告诉我。 非常感谢。
func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {
let newString = textField.text.bridgeToObjectiveC().stringByReplacingCharactersInRange(range, withString: string)
if (newString == "" ) {
self.doneButton.enabled = false
} else {
self.doneButton.enabled = true
}
return true
}
这是一个函数,它将采用NSRange
并替换String
的一部分:
func replaceRange(nsRange:NSRange, #ofString:String, #withString:String) ->String {
let start = nsRange.location
let length = nsRange.length
let endLocation = start + length
let ofStringLength = countElements(ofString)
if start < 0 || endLocation < start || endLocation > ofStringLength {
return ofString
}
var startIndex = advance(ofString.startIndex, start)
var endIndex = advance(startIndex, length)
var range = Range(start:startIndex, end:endIndex)
var final = ofString.stringByReplacingCharactersInRange(range, withString:withString)
return final
}
var original = "🇪🇸😂This is a test"
var replacement = "!"
var nsRange:NSRange = NSMakeRange(1, 2)
var newString = replaceRange(nsRange, ofString:original, withString:replacement)
println("newString:\(newString)")
输出:
newString:🇪🇸!his is a test
无需使用bridgeToObjectiveC()
只需将字符串转换为NSString
:
let newString = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string)
这是我喜欢使用的东西:
if ([textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].length > 0)
{
// do something with the text that is there ...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.