Ios UICollectionViews导线内的UISlider不接收触摸事件

Ios UICollectionViews导线内的UISlider不接收触摸事件,ios,interface,uicollectionview,uislider,Ios,Interface,Uicollectionview,Uislider,目前,我正努力在通过xib布局+UICollectionView布局的UISlider上获得触感 包含UISlider的我的布局如下所示: UICollectionView本身工作得非常好。UISlider的布局与其他几个视图一起进行布局 目前,我体验到UISlider对任何用户交互都没有反应。我可以在collectionView中滚动,但当我尝试更改滑块的值时,它只是保持原样 我找到了一些解决方案,比如: 但是这些解决方案对我来说似乎并不完整,也没有什么帮助,因为我对ios和触摸屏处理还

目前,我正努力在通过xib布局+UICollectionView布局的UISlider上获得触感

包含UISlider的我的布局如下所示:

UICollectionView本身工作得非常好。UISlider的布局与其他几个视图一起进行布局

目前,我体验到UISlider对任何用户交互都没有反应。我可以在collectionView中滚动,但当我尝试更改滑块的值时,它只是保持原样

我找到了一些解决方案,比如:

但是这些解决方案对我来说似乎并不完整,也没有什么帮助,因为我对ios和触摸屏处理还很陌生


我将感谢任何帮助

创建一个新的
.swift
文件。您可以随意命名并粘贴到以下代码中:

import UIKit

class YourClassName: UICollectionViewCell {


    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {

        for subview in subviews {

            if !subview.isHidden && subview.isUserInteractionEnabled && subview.point(inside: convert(point, to: subview), with: event) {

                return true
            }

        }

        return false

    }


}
然后,单击集合视图单元格并转到identity inspector,其中显示“class”,输入您先前创建的类名。希望这能奏效

编辑


他们的个人解决方案如下所示,但这里有一个通用的解决方案,供需要将其融入代码的其他人使用:)

创建一个新的
.swift
文件。您可以随意命名并粘贴到以下代码中:

import UIKit

class YourClassName: UICollectionViewCell {


    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {

        for subview in subviews {

            if !subview.isHidden && subview.isUserInteractionEnabled && subview.point(inside: convert(point, to: subview), with: event) {

                return true
            }

        }

        return false

    }


}
然后,单击集合视图单元格并转到identity inspector,其中显示“class”,输入您先前创建的类名。希望这能奏效

编辑


他们的个人解决方案如下所示,但这里有一个通用的解决方案,适用于需要将其融入代码中的任何其他人:)

首先,当我测试您的解决方案时,它没有按预期工作,但我尝试了一点

我要提到的第一件事是,我使用的是多操作系统引擎,因此为我做正确事情的代码是用纯Java编写的,但它也应该与您的swift解决方案配合使用

这是对我有效的解决方案毕竟,我用命中测试替换了内部测试点:

import org.moe.natj.general.Pointer;
import org.moe.natj.general.ann.Owned;
import org.moe.natj.general.ann.RegisterOnStartup;
import org.moe.natj.objc.ObjCRuntime;
import org.moe.natj.objc.ann.ObjCClassName;
import org.moe.natj.objc.ann.Selector;

import apple.coregraphics.struct.CGPoint;
import apple.uikit.UICollectionViewCell;
import apple.uikit.UIEvent;
import apple.uikit.UIView;

@org.moe.natj.general.ann.Runtime(ObjCRuntime.class)
@ObjCClassName("UICustomCollectionViewCell")
@RegisterOnStartup
public class UICustomCollectionViewCell extends UICollectionViewCell {

    protected UICustomCollectionViewCell(Pointer peer) {
        super(peer);
    }

    /**
     * @noinspection JniMissingFunction
     */
    @Owned
    @Selector("alloc")
    public static native UICustomCollectionViewCell alloc();

    /**
     * @noinspection JniMissingFunction
     */
    @Selector("init")
    public native UICustomCollectionViewCell init();

    @Override
    public UIView hitTestWithEvent(CGPoint point, UIEvent event) {
        for (UIView subview : subviews()) {
            if (!subview.isHidden() &&
                    subview.isUserInteractionEnabled()) {
                return subview.hitTestWithEvent(convertPointToView(point, subview), event);
            }
        }
        return super.hitTestWithEvent(point, event);
    }

}

谢谢你的帮助!如果没有它,我将无法解决我已经有好几天的问题。也许您想编辑您的答案以同时使用命中测试。

首先,当我测试您的解决方案时,它没有按预期工作,但我尝试了一下

我要提到的第一件事是,我使用的是多操作系统引擎,因此为我做正确事情的代码是用纯Java编写的,但它也应该与您的swift解决方案配合使用

这是对我有效的解决方案毕竟,我用命中测试替换了内部测试点:

import org.moe.natj.general.Pointer;
import org.moe.natj.general.ann.Owned;
import org.moe.natj.general.ann.RegisterOnStartup;
import org.moe.natj.objc.ObjCRuntime;
import org.moe.natj.objc.ann.ObjCClassName;
import org.moe.natj.objc.ann.Selector;

import apple.coregraphics.struct.CGPoint;
import apple.uikit.UICollectionViewCell;
import apple.uikit.UIEvent;
import apple.uikit.UIView;

@org.moe.natj.general.ann.Runtime(ObjCRuntime.class)
@ObjCClassName("UICustomCollectionViewCell")
@RegisterOnStartup
public class UICustomCollectionViewCell extends UICollectionViewCell {

    protected UICustomCollectionViewCell(Pointer peer) {
        super(peer);
    }

    /**
     * @noinspection JniMissingFunction
     */
    @Owned
    @Selector("alloc")
    public static native UICustomCollectionViewCell alloc();

    /**
     * @noinspection JniMissingFunction
     */
    @Selector("init")
    public native UICustomCollectionViewCell init();

    @Override
    public UIView hitTestWithEvent(CGPoint point, UIEvent event) {
        for (UIView subview : subviews()) {
            if (!subview.isHidden() &&
                    subview.isUserInteractionEnabled()) {
                return subview.hitTestWithEvent(convertPointToView(point, subview), event);
            }
        }
        return super.hitTestWithEvent(point, event);
    }

}

谢谢你的帮助!如果没有它,我将无法解决我已经有好几天的问题。也许您想编辑您的答案以同时使用命中测试。

Hi!谢谢你的回答,请看一下为我下面的特例所用的解决方案:-)@TheWhiteLlama很高兴它奏效了。这只是一个通用的解决方案,您的解决方案更具体;)@我最初为我的UIView获得了这段代码,所以我可以通过它点击到后面的对象!谢谢你的回答,请看一下为我下面的特例所用的解决方案:-)@TheWhiteLlama很高兴它奏效了。这只是一个通用的解决方案,您的解决方案更具体;)@Whitellama我最初为我的UIView获得了这段代码,所以我可以通过它点击到后面的对象