如何通过调用函数将数据从视图传递到子视图?

Posted

技术标签:

【中文标题】如何通过调用函数将数据从视图传递到子视图?【英文标题】:How to pass data from view to subview by calling a function? 【发布时间】:2017-08-03 04:48:48 【问题描述】:

我是 swift 新手,我正在尝试制作一个特定的子视图,它是通过调用父 collectioncell 中的函数选择的 collectionViewcell。

我正在调用setChosenToBeTrue(),它在子视图中将 isChosen 变量设置为 true,但由于某些奇怪的原因,变量的值并没有真正设置?可能是什么问题?谢谢!我查看了一些通过故事板传递数据的资源,或者有一些旧的资源没有快速运行,我仍然感到困惑。

这是我的代码

在父collectioncell

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
             

        let rightCell = collectionView.dequeueReusableCell(withReuseIdentifier: rightCell, for: indexPath) as! RightCell                       
        rightCell.setChosenToBeTrue()
        return rightCell
    

在子视图中

var isChosen: Bool = false
override init(frame: CGRect) 
      super.init(frame: frame)
      setupViews()
 

func setChosenToBeTrue() 
    self.isChosen = true //function is called but setting it here,  
     //when it reaches setUpViews(), this boolean is still false


func setupViews()
        self.isChosen = true // setting it here works (obviously)
        print(isChosen)
        backgroundColor = UIColor.gray

【问题讨论】:

Passing Data between View Controllers的可能重复 您在 CellforRowAt 中调用了 setChosenToBeTrue,您是否在执行后使用断点进行了检查。 setChosenToBeTrue() 你的 setUpViews() 被调用了吗?如果没有,只需在 setChosenToBeTrue() 结束时调用 setUpViews() 使用断点首先调用 setChosenToBeTrue,然后调用 setupViews。我不想通过在 setChosenToBeTrue() 之后调用 setupViews 来破解我的解决方案,因为我并不总是将单元格设置为 true,只有选定的单元格 @xcalysta 由于您正在重用您的单元实例,请确保在您的UICollectionViewCell 子类中覆盖prepareForReuse(),以便您可以先进行清理并准备再次正确配置它。跨度> 【参考方案1】:

这很简单。 在调用 setChosenToBeTrue() 之前调用 init() 和 setupViews() 方法。因此,您在设置视图后更新此变量。

试试这个,例如:

var isChosen: Bool = false 
        didSet 
            setupViews()
        
    

【讨论】:

以上是关于如何通过调用函数将数据从视图传递到子视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不调用 [关闭] 的情况下将整数从控制器设置到子视图

SwiftUI - 如何通过视图模型完成调用函数

VueJS:通过路由器视图将数据从根元素传递到子组件

Swift - 将数据从父视图控制器传递到子视图控制器

如何将参数“请求”从脚本传递给视图的函数? [关闭]

将 knockoutjs 视图模型传递给多个 ajax 调用