"textViewDidChange" Swift 的重新声明无效
Invalid Redeclaration of "textViewDidChange" Swift
我有三个不同的文本框,我需要在其中使用 3 种不同的 "textViewDidChange" 方法。将它们组合成一个功能对我来说不起作用,因为它们是三种可能相互影响的不同动作。所以我正在尝试制作三个不同的功能,如下所示。但是我收到 "invalid redeclaration" 错误。我该如何解决?
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:
方法都采用与参数相同的类型(函数范围内的变量名称在这里不起作用)。
解决具有多个函数的一种方法是使用一个 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 是您的 UITextView 的出口。
这对我来说有点矫枉过正,但它确实有效。
- 您正在创建三个具有相同名称的方法
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
}}
我有三个不同的文本框,我需要在其中使用 3 种不同的 "textViewDidChange" 方法。将它们组合成一个功能对我来说不起作用,因为它们是三种可能相互影响的不同动作。所以我正在尝试制作三个不同的功能,如下所示。但是我收到 "invalid redeclaration" 错误。我该如何解决?
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:
方法都采用与参数相同的类型(函数范围内的变量名称在这里不起作用)。
解决具有多个函数的一种方法是使用一个 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 是您的 UITextView 的出口。 这对我来说有点矫枉过正,但它确实有效。
- 您正在创建三个具有相同名称的方法
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
}}