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