【问题标题】:How to pass custom parameter in selector如何在选择器中传递自定义参数
【发布时间】:2021-03-14 16:42:58
【问题描述】:
  • 我有一个对象数组。

  • 每个对象都有一个 ID。

  • 我有一个 UIStackview。

  • 每个对象都作为排列好的子视图(也是一个 Stackview)动态添加到 UIStackview。

  • 每个子视图都有一个 UITapGestureRecognizer。

  • 识别器的动作是一个选择器。

如何在该选择器中传递对象?

子视图的点击手势:

subview.addGestureRecognizer(UITapGestureRecognizer(target: self, action: Selector))

点击触发的功能(为更好理解而修改):

@objc func addModelToScene(sender: AnyObject, myWantedObject: MyObject) {
        let anchor = AnchorEntity(plane: .horizontal)
        anchor.name = "modelAnchor"
        self.arView.scene.addAnchor(anchor)
        
        var cancellable: AnyCancellable? = nil
        cancellable = ModelEntity.loadModelAsync(named: myWantedObject.mesh)
            .sink(receiveCompletion: {error in
                print("Unexpected error: \(error)")
                cancellable?.cancel()
            }, receiveValue: {entity in
                anchor.addChild(entity)
                cancellable?.cancel()
            })
    }

一般来说,问题是:

如何将自定义参数传递给选择器?

【问题讨论】:

    标签: ios arrays swift uikit


    【解决方案1】:

    在循环中使用这个

    subview.tag = arrayIndexOfObject
    

    然后在选择器方法里面

    @objc func addModelToScene(_ sender:UITapGestureRecognizer) {
      let index = sender.view!.tag
      // use it to access the object from the array
    }
    

    【讨论】:

    • 如果我将发件人设为 UIStackView 并编写:let index = sender.tag
    • UITapGestureRecognizer 的选择器必须有 1 个 UITapGestureRecognizer 类型的参数,您不能更改它,因为这会使应用程序崩溃
    【解决方案2】:

    为什么不将消息直接定位到相关对象而不是自身? subview.addGestureRecognizer(UITapGestureRecognizer(target: subview, action: Selector))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多