将数据从 textView 传递到另一个时出错 ViewController
Error while passing Data from a textView to another ViewController
我尝试使用
@IBOutlet weak var textField: UITextField!
@IBAction func saveTextToVar(sender: UIButton) {
var exercises: NSString = textField.text
}
...
override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!) {
if (segue.identifier == "segueTest") {
var svc = segue!.destinationViewController as ViewController;
svc.exercises = textField.text
}
将在 textField 中键入的变量 "exercises" 保存到 ViewController,我在其中声明了变量
class ViewController: UIViewController,UIPickerViewDelegate {
var exercises = ["a","b","c"]
(它应该用作UIpickerView中的组件)但是在ViewController2 上出现错误提示。
'String' 不能转换为“[String]”
当然可以!您可以将 PickerView 的标题保存在某处(CoreData 将它们永久保存或普通数组,如果您不需要它们永久存储),然后将它们动态加载到 UIPickerViewDelegate 的
pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String!
在我自己的应用程序中,我有一个 dataModel
,我在其中存储了我应用程序中给定模块的所有相关数据。我像这样动态加载我的 PickerView 的标题:
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return dataModel.levels[row]
}
我也实现了
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return dataModel.levels.count
}
确保组件中的行数始终正确。
正如错误所说,您的练习 var 被键入为字符串数组,并且您正在将字符串值传递给它。为了完成这项工作,您必须在 prepareForSegue 方法
中将文本字段中的字符串附加到练习数组
override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!) {
if (segue.identifier == "segueTest") {
var svc = segue!.destinationViewController as ViewController;
svc.exercises.append(textField.text)
}
已编辑:由于您需要从根视图控制器添加多个练习,您应该将它们全部保存在根视图控制器内的变量中,然后将所有新值添加到 ViewController 练习。所以你的代码应该看起来像 fowllowing
@IBOutlet weak var textField: UITextField!
var exercises: [String] = []
@IBAction func saveTextToVar(sender: UIButton) {
exercises.append(textField.text)
}
override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!) {
if (segue.identifier == "segueTest") {
var svc = segue!.destinationViewController as ViewController;
svc.exercises = svc.exercises + self.exercises
}}
我尝试使用
@IBOutlet weak var textField: UITextField!
@IBAction func saveTextToVar(sender: UIButton) {
var exercises: NSString = textField.text
}
...
override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!) {
if (segue.identifier == "segueTest") {
var svc = segue!.destinationViewController as ViewController;
svc.exercises = textField.text
}
将在 textField 中键入的变量 "exercises" 保存到 ViewController,我在其中声明了变量
class ViewController: UIViewController,UIPickerViewDelegate {
var exercises = ["a","b","c"]
(它应该用作UIpickerView中的组件)但是在ViewController2 上出现错误提示。 'String' 不能转换为“[String]”
当然可以!您可以将 PickerView 的标题保存在某处(CoreData 将它们永久保存或普通数组,如果您不需要它们永久存储),然后将它们动态加载到 UIPickerViewDelegate 的
pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String!
在我自己的应用程序中,我有一个 dataModel
,我在其中存储了我应用程序中给定模块的所有相关数据。我像这样动态加载我的 PickerView 的标题:
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return dataModel.levels[row]
}
我也实现了
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return dataModel.levels.count
}
确保组件中的行数始终正确。
正如错误所说,您的练习 var 被键入为字符串数组,并且您正在将字符串值传递给它。为了完成这项工作,您必须在 prepareForSegue 方法
中将文本字段中的字符串附加到练习数组override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!) {
if (segue.identifier == "segueTest") {
var svc = segue!.destinationViewController as ViewController;
svc.exercises.append(textField.text)
}
已编辑:由于您需要从根视图控制器添加多个练习,您应该将它们全部保存在根视图控制器内的变量中,然后将所有新值添加到 ViewController 练习。所以你的代码应该看起来像 fowllowing
@IBOutlet weak var textField: UITextField!
var exercises: [String] = []
@IBAction func saveTextToVar(sender: UIButton) {
exercises.append(textField.text)
}
override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!) {
if (segue.identifier == "segueTest") {
var svc = segue!.destinationViewController as ViewController;
svc.exercises = svc.exercises + self.exercises
}}