【问题标题】:passing values to a Modal UIViewController - Swift将值传递给模态 UIViewController - Swift
【发布时间】:2015-04-19 22:17:28
【问题描述】:

我在 UICollectionView 中有一个用户配置文件列表,当我点击其中一个用户时,我有一个模态显示用户配置文件的 segue,但是我似乎无法将值从一个视图传递到另一个视图。例如..图像数据、用户名等。

在我的 UICollectionViewController 我有以下内容:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "showSelectedUserProfile" {

        let cell = sender as! GrafterCell
        let SP = segue.destinationViewController as! SelectedProfileViewController
        let indexPath = self.collectionView?.indexPathForCell(cell)

        var username = allUsernames[indexPath!.row]
        SP.username.text = username

    }
}

cell 是集合视图中的单元格,SP 如果是目标视图控制器

运行脚本时出现以下错误

fatal error: unexpectedly found nil while unwrapping an Optional value

它显示 SP.username 为 nil,我不知道为什么它是 nil,因为它连接到 Class 并称为 username

class SelectedProfileViewController: UIViewController {

@IBOutlet weak var btnHideSelectedProfileViewController: UIButton!
@IBOutlet weak var userProfilePicture: UIImageView!
@IBOutlet weak var username: UILabel!


override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true)
    self.navigationController?.navigationBarHidden = true
}

@IBAction func btnHideSelectedProfileViewControllerClicked(sender: AnyObject) {

    self.dismissViewControllerAnimated(true, completion: nil)

}

}

【问题讨论】:

    标签: ios swift uiviewcontroller segue modalviewcontroller


    【解决方案1】:

    您有一个对象数组,其属性为username,属性为text。据我推测,您可能正在存储username 属性为UILabel 的对象数组?

    这将是一个非常糟糕的设计。您的数据数组应该只有数据对象,而不是 UI 元素。永远不要使用 UI 元素的内容来存储和检索数据(您似乎正在这样做)。 UI 元素应仅用于显示数据。

    你需要给你的目标控制器一个String类型的属性来保存用户名信息。

    另外,请勿调用具有误导性的标签 username。如果它是一个标签,请将其命名为 nameLabel 以使代码对外部读者可读和可理解。

    【讨论】:

    • 嗨,我已将其更改为usernameLabel,当我打印该值时,var username = allUsernames[indexPath!.row] 返回一个字符串,它返回所选用户的用户名。 SP.usernameLabel.text 显示为 nil
    • 您仍在使用 UI 来存储数据,在这种情况下是将其传递给控制器​​。在prepareForSegue 期间甚至没有创建标签,因此文本分配无效。使用目标控制器的字符串属性来保存这些数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多