根据数组中的项目数迭代创建 UITextView
Iteratively creating UITextViews based on number of items in an array
对于 swift 来说还很陌生,而且一般来说编码很抱歉,如果这是一个基本问题,但我希望能够根据字符串数组中的项目数按程序创建 UITextView。例如:
var stringArray = [“first sentence string”, “second sentence string”]
//create two UITextViews with text property of “first sentence string” and “second sentence string”
在这种情况下,手动创建两个 UITextView 来放入字符串并不太难,但我希望能够使用 stringArray 所需的尽可能多的文本视图来更新我的视图,这将有一个变化其中的项目数量。
我的第一个想法是迭代创建 UITextView 的变量的名称,例如:
for i in stringArray {
var textView(i) = UITextView()
//textView properties inserted here
view.addSubView(textView(i))
}
但这不起作用,因为 textView(i) 不是有效的变量声明。
有更简单的 Swifty 方法可以解决这个问题,但如果您只是想学习,可以这样做:
for i in 0 ..< stringArray.count {
let text = stringArray[i]
// Set some fixed height for the textView so you can space it out by that height
let textViewHeight: CGFloat = 50.0
let textView = UITextView()
view.addSubview(textView)
textView.frame = CGRect(x: 0, y: CGFloat(i)*textViewHeight, width: view.frame.width, height: textViewHeight)
textView.text = text
}
听起来您的问题是尝试命名 属性 textView(i)
。您不能将变量传递给 属性 的名称。在这种情况下,您甚至不需要跟踪 textView 的迭代(即 textView1
、textView2
等),因为一旦循环迭代完成,您将不会对它的引用了。如果你想参考这些,你可以添加一个 TextViews 数组作为实例 属性 像这样:
var stringArray = ["first sentence string", "second sentence string"]
var textViews = [UITextView]()
for i in 0 ..< stringArray.count {
let text = stringArray[i]
// Set some fixed height for the textView so you can space it out by that height
let textViewHeight: CGFloat = 50.0
let textView = UITextView()
view.addSubview(textView)
textView.frame = CGRect(x: 0, y: CGFloat(i)*textViewHeight, width: view.frame.width, height: textViewHeight)
textView.text = text
// Append the textView to the array
textViews.append(textView)
}
现在您可以访问数组中的任何和所有 textView。在你的代码中某处说你想访问你的 textView 数组中的第 n 个 textView 并更改它的文本,你可以通过说 textViews[n].text = "updated text"
.
来完成
对于 swift 来说还很陌生,而且一般来说编码很抱歉,如果这是一个基本问题,但我希望能够根据字符串数组中的项目数按程序创建 UITextView。例如:
var stringArray = [“first sentence string”, “second sentence string”]
//create two UITextViews with text property of “first sentence string” and “second sentence string”
在这种情况下,手动创建两个 UITextView 来放入字符串并不太难,但我希望能够使用 stringArray 所需的尽可能多的文本视图来更新我的视图,这将有一个变化其中的项目数量。
我的第一个想法是迭代创建 UITextView 的变量的名称,例如:
for i in stringArray {
var textView(i) = UITextView()
//textView properties inserted here
view.addSubView(textView(i))
}
但这不起作用,因为 textView(i) 不是有效的变量声明。
有更简单的 Swifty 方法可以解决这个问题,但如果您只是想学习,可以这样做:
for i in 0 ..< stringArray.count {
let text = stringArray[i]
// Set some fixed height for the textView so you can space it out by that height
let textViewHeight: CGFloat = 50.0
let textView = UITextView()
view.addSubview(textView)
textView.frame = CGRect(x: 0, y: CGFloat(i)*textViewHeight, width: view.frame.width, height: textViewHeight)
textView.text = text
}
听起来您的问题是尝试命名 属性 textView(i)
。您不能将变量传递给 属性 的名称。在这种情况下,您甚至不需要跟踪 textView 的迭代(即 textView1
、textView2
等),因为一旦循环迭代完成,您将不会对它的引用了。如果你想参考这些,你可以添加一个 TextViews 数组作为实例 属性 像这样:
var stringArray = ["first sentence string", "second sentence string"]
var textViews = [UITextView]()
for i in 0 ..< stringArray.count {
let text = stringArray[i]
// Set some fixed height for the textView so you can space it out by that height
let textViewHeight: CGFloat = 50.0
let textView = UITextView()
view.addSubview(textView)
textView.frame = CGRect(x: 0, y: CGFloat(i)*textViewHeight, width: view.frame.width, height: textViewHeight)
textView.text = text
// Append the textView to the array
textViews.append(textView)
}
现在您可以访问数组中的任何和所有 textView。在你的代码中某处说你想访问你的 textView 数组中的第 n 个 textView 并更改它的文本,你可以通过说 textViews[n].text = "updated text"
.