我知道这个问题已经在Objective-C中解决了,但我在Swift中没有看到任何解决方案.我试图从这篇文章转换解决方案代码,但我收到错误:
func textTapped(recognizer: UITapGestureRecognizer){
var textView: UITextView = recognizer.view as UITextView
var layoutManager: NSLayoutManager = textView.layoutManager
var location: CGPoint = recognizer.locationInView(textView)
location.x -= textView.textContainerInset.left
location.y -= textView.textContainerInset.top
var charIndex: Int
charIndex = layoutManager.characterIndexForPoint(location, inTextContainer: textView.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)
if charIndex < textView.textStorage.length {
// do the stuff
println(charIndex)
}
}
Run Code Online (Sandbox Code Playgroud)
我认为问题出在这一行(见这里的错误):
var textView: UITextView = recognizer.view as UITextView
Run Code Online (Sandbox Code Playgroud)
...我根据这一行从Objective-C转换而来:
UITextView *textView = (UITextView *)recognizer.view;
Run Code Online (Sandbox Code Playgroud)
最后,我也对如何调用此函数表示怀疑.据我了解,该函数应该传递给viewDidLoad()中的Selector,如下所示:
let aSelector: Selector = "textTapped:"
let tapGesture = UITapGestureRecognizer(target: self, action: aSelector) …Run Code Online (Sandbox Code Playgroud) 我有一个函数,包含TextView中的文本字符串.我希望随着时间的推移改变该文本的淡化.这不是我对如何褪色的实现,而是如何将两个参数(alpha值和应该褪色的字符范围)传递给NSTimer中的Selector.
我看过这个问题,但这并没有给我一个答案.
这就是我现在所拥有的:
func someFunc(){
var timer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("val:"), userInfo: 5, "someString", repeats: true)
}
func val(val1: Int, val2: String){
println("printing \(val1) and \(val2)")
}
Run Code Online (Sandbox Code Playgroud)
然而,它给我一个"额外参数'选择器'调用'错误.我需要能够传递两个参数,但我也无法正确传递一个参数; 从函数中删除val2并删除"someString",所以我只传递一个参数,导致函数在每个时间步打印"print 140611230609088"行.