“textViewDidChange”无效的重新声明Swift
问题描述:
我有三个不同的文本框,其中我需要使用3个不同的“textViewDidChange”方法。将它们组合在一个功能中对我来说并不合适我是三种不同的行为,可能会相互影响。所以我试图做出三个不同的功能如下。但是我得到了“无效的重新声明”错误。我怎么弄出来的?“textViewDidChange”无效的重新声明Swift
func textViewDidChange(messageTxt1: UITextView) {
var len = count(messageTxt.text.utf16)
var diff = 90 - len
if diff < 0 {
charsLbl.textColor = UIColor.redColor()
} else {
charsLbl.textColor = UIColor.blackColor()
}
charsLbl.text = "\(diff) chars left"
}
func textViewDidChange (messageTxt2: UITextView) {
refreshResults()
var len2 = count(messageTxt2.text.utf16)
if len2 > 3 {
println("search")
}
else
{
resultsTable.hidden = true
}
var diff2 = 30 - len2
if diff2 < 0 {
charsLbl2.textColor = UIColor.redColor()
} else {
charsLbl2.textColor = UIColor.blackColor()
}
charsLbl2.text = "\(diff2) chars left"
}
func textViewDidChange (messageTxt3: UITextView) {
var len3 = count(messageTxt3.text.utf16)
var diff3 = 30 - len3
if diff3 < 0 {
charsLbl3.textColor = UIColor.redColor()
} else {
charsLbl3.textColor = UIColor.blackColor()
}
charsLbl3.text = "\(diff3) chars left"
}
答
- 您正在创建三个同名的方法
textViewDidChange
。 - 在你的情况下使用
tag
属性,并只为所有人定义一种方法。
例
let textView1 = UITextView()
textView1.tag = 1
let textView2 = UITextView()
textView2.tag = 2
let textView3 = UITextView()
textView3.tag = 3
In method just add condition for that.
func textViewDidChange (messageTxt: UITextView) {
if messageTxt.tag == 1
{
// Your code for textview 1
}
else if messageTxt.tag == 2
{
// Your code for textview 2
}
else if messageTxt.tag == 3
{
// Your code for textview 3
}}
答
这是根本不可能的,因为每个textViewDidChange:
方法走的是同一类型的参数(函数范围内的变量的名称并不在这里发挥作用)。
一种方式把它整理出来有几个功能将有一个textViewDidChange:
方法和使用它的方式来调用其他的功能是这样的:
func textViewDidChange(textView: UITextView) {
switch textView {
case textView1:
textViewDidChange1()
break
case textView2:
textViewDidChange2()
break
case textView3:
textViewDidChange3()
break
default:
print("Shouldn't happen")
break
}
}
func textViewDidChange1() {
// Do something
}
func textViewDidChange2() {
// Do something
}
func textViewDidChange3() {
// Do something
}
textView1,textView2和textView3是奥特莱斯您UITextViews 。 这看起来有点矫枉过正,但它工作。
+0
谢谢Fantattitude!这解决了我的问题。好的解决方案 – saner
为什么在可以直接比较对象时使用标记? 'messageTxt === textView1'完成你所期望的。 – Fantattitude
@Fantattitude你必须为此保持参考。 – iDhaval
对我来说,保持引用更具有意义,它不太容易出错,而不仅仅是使用带有“魔术”数字的标签。 – Fantattitude