将值传递给模态 UIViewController - Swift

Posted

技术标签:

【中文标题】将值传递给模态 UIViewController - Swift【英文标题】:passing values to a Modal 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)




【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

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

以上是关于将值传递给模态 UIViewController - Swift的主要内容,如果未能解决你的问题,请参考以下文章

将值传递给另一个UIViewController

在 setState 不起作用后,Reactjs 将值作为道具传递

如何将值传递给另一个视图控制器?

在新的故事板中将值传递给 UIViewController - Swift

Javascript,将值传递给新添加的表格行/单元格

如何在 iOS Objective C 的嵌套 UICollectionViews 中从 Child UICollectionViewCell 的 UIButton 将值传递给新的 UIViewCon