我在我的项目中使用SevenSwitch.我需要将其添加到a中,UIScrollView但是当我将其添加到滚动视图中时,控件似乎无法接收触摸事件.
我尝试了子类化scrollview和覆盖下面的代码:
- (BOOL)touchesShouldCancelInContentView:(UIView *)view {
return NO;
}
Run Code Online (Sandbox Code Playgroud)
还补充说:
self.scrollView.delaysContentTouches = NO;
Run Code Online (Sandbox Code Playgroud)
但仍然无法接收触摸事件.如何才能停止scrollview从防止UIControl从接收触摸?
更新
我在滚动视图上有一个轻击手势,因为我希望当用户点击滚动视图时我打电话[self.scrollView endEditing:YES]关闭键盘.当我将其拆下时,七个开关正在使用水龙头.
我将下面的代码添加到我的点按手势中:
tap.cancelsTouchesInView = NO;
Run Code Online (Sandbox Code Playgroud)
现在sevenswitch正在使用水龙头但是在进行切换on或off触摸跟踪时会出现问题.
我正在制作一个自定义activityIndicator.我希望它表现得像UIActivityIndicatorView但有不同的动画.
当您放置UIActivityIndicatorView到Storyboard时,此视图的宽度和高度将被锁定以进行修改(变灰).
在代码中为视图制作固定宽度没有问题,但是可以以相同的方式制作自定义视图UIActivityIndicatorView:在故事板中灰度和高度是否变灰?
我正在创建 UIControl 的自定义子类(我需要覆盖它的 draw 方法)并且我想添加 RxSwift 以将其isSelected属性绑定到我的模型。
到现在为止还挺好。这工作正常。
我的问题是如何更改值isSelected属性以响应用户 touchUpInside 事件?
我的第一次尝试是使用UIControl的addTarget方法,但是ControlProperty 不报告以编程方式更改isSelected的值(如文档中所述)。但我可以想出另一种方法来解决这个问题。
任何帮助表示赞赏。
子类的源代码:
class SYYesNoButton: UIControl {
override init(frame: CGRect) {
super.init(frame: frame)
// subscribe to touchUpInside event
addTarget(
self,
action: #selector(userDidTouchUpInside),
for: UIControlEvents.touchUpInside)
}
func userDidTouchUpInside() {
// change the value of the property
// this does not work,
// the change is not reported to the ControlProperty
// HOW CAN I CHANGE THIS ??
self.isSelected = !isSelected
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试以编程方式在MATLAB中创建一个单击事件,它将模仿用户单击GUI对象.对象的回调函数是一个子函数,所以我不能直接调用它.但是,我能够从对象获取回调属性,最终是一个3乘1的单元格数组,其中包含以下内容:
@uiBlockFn/callback_til [ 188.0011] [1x1 struct]
Run Code Online (Sandbox Code Playgroud)
如何在代码中调用此回调函数,以便模仿用户单击GUI对象时会发生什么?
我有一个XIB文件UIControl和UIScrollView里面的元素.我想在视图中添加背景图像.我尝试在IB中添加一个ImageView,但我不能让它作为背景出现并且它模糊了控制元素.发送sendViewBack消息似乎也没有做任何事情.
当我以编程方式创建UIImageView时,它不会显示.
以下是我尝试的代码:
程序化创作
UIImage *imageBackground = [UIImage imageWithContentsOfFile:@"globalbackground"];
UIImageView *backgroundView = [[UIImageView alloc] initWithImage:imageBackground];
[[self view] addSubview:backgroundView];
[[self view] sendSubviewToBack:backgroundView];
Run Code Online (Sandbox Code Playgroud)
处理NIB文件
[[self view] sendSubviewToBack:background];
Run Code Online (Sandbox Code Playgroud)
其中background是IBOutlet在头文件中声明并连接到IB中的NIB图像视图.
我在这里缺少一步吗?
我试图UIControl在我的视图控制器中使用自定义.我的自定义类,它UIControl为我的自定义控件创建子类并为其分配实例,并通过以下代码添加到我的视图控制器视图中
CustomControl *customControl = [[CustomControl alloc]initWithFrame:CGRectMake(44, 388, 235, 160)];
[self.view addSubview:customControl];
Run Code Online (Sandbox Code Playgroud)
然后我在实现以下委托方法 CustomControl
- (BOOL) beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event;
- (BOOL) continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event;
- (void) endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)cancelTrackingWithEvent:(UIEvent *)event
Run Code Online (Sandbox Code Playgroud)
我面临的问题是当我在控件内部进行跟踪时 - (void)cancelTrackingWithEvent:(UIEvent *)event在该- (BOOL) continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event方法未被调用之后调用.为什么这个方法- (void)cancelTrackingWithEvent:(UIEvent *)event被调用...
我阅读的文件说,如果由于非事件原因被取消,事件可能是零,例如从窗口中移除但无法理解确切的scernario提前感谢.
我总是只返回YES. 我实施的代表是:
- (BOOL) beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{
[super beginTrackingWithTouch:touch withEvent:event];
NSLog(@"Touch begins");
return YES;
}
- (BOOL) continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{
[super …Run Code Online (Sandbox Code Playgroud) 我有一个带有轻敲手势识别器的视图.此视图的子视图是我的自定义类的实例,它继承自UIControl.我遇到一个问题,UIControl子类有时会允许触摸事件传递到父视图,而不应该.
在UIControl子类中,我重写了这些函数(代码在Swift中)
override func beginTrackingWithTouch(touch: UITouch, withEvent event: UIEvent) -> Bool
{
return true
}
override func continueTrackingWithTouch(touch: UITouch, withEvent event: UIEvent) -> Bool
{
// The code here moves this UIControl so its center is at the touchpoint
return true
}
override func endTrackingWithTouch(touch: UITouch,withEvent event: UIEvent)
{
// Something important happens here!
}
Run Code Online (Sandbox Code Playgroud)
如果用户在UIControl内触地,在拖动控制解决此系统工作得很好,两个 X和Y方向,然后升空的画面.在这种情况下,调用所有这三个函数,并发生"重要的事情".
但是,如果用户使用UIControl触摸,仅在X方向上拖动控件,然后从屏幕上抬起,我们就会遇到问题.调用前两个函数,但是当触点从屏幕上抬起时,调用轻击手势识别器,并且不调用endTrackingWithTouch.
如何确保始终调用endTrackingWithTouch?
我有一个UIControl包含一些其他控件的自定义.在这些控件之间有空的空间和我UIControl需要透明的背景.
我需要捕捉我的自定义上发生的所有触摸事件,UIControl即使它们恰好发生在其他控件之间(透明区域).我不能使用手势识别器,我需要更多的控制然后他们提供.相反,我想注册触摸处理功能,如下所示:
myControl.addTarget(self, action: "handleTouchDown:event:", forControlEvents: UIControlEvents.TouchDown)
Run Code Online (Sandbox Code Playgroud)
有了这种方法,我会收到与非透明区域相关的触摸,myControl而不是那些发生透明背景的区域.
我尝试覆盖hitTest::point:withEvent我的自定义控件,不检查alpha值.但是hitTest::point:withEvent当触摸发生在透明控制区域时,甚至都没有调用.我用layer自定义替换了我的控件,CALayer并且hitTest在没有结果的情况下覆盖了它(hitTest在该层上似乎根本没有被调用).
为了提供一个完美的答案(并赢得赏金),您需要做的就是:
UIControl(例如UIButton).UIControl(文本UIButton)中删除所有内容并使其背景透明(设置为清除颜色或将Alpha通道设置为0).addTarget::action:forControlEvents:方法注册UIControlEvents.TouchDown控件上的事件.在handler方法中打印一些东西到控制台.addTarget::action:forControlEvents:.没有黑客解决方案.我知道在控件上设置背景alpha通道0.01会使它突然工作,但这是我不想要的黑客攻击.在这里描述你做了什么.为此,我将手势识别器附加到我的按钮容器视图中。
\n\n只要我的按钮是UIButtons (即点击按钮本身会导致TouchUpInside按钮上的事件,点击按钮容器中的其他任何位置不会执行任何操作,点击单元格中按钮容器外部的任何其他位置,就会导致待选择的单元格)。但是,如果我使用 aUIControl而不是 a UIButton,则情况不再是 \xe2\x80\x94,控件永远不会响应点击(按钮容器始终消耗点击,并且在单元格中的按钮容器外部点击,导致单元格待选择)。应该注意的是,如果我没有将手势识别器添加到按钮容器中,则控件将以与UIButton.
我唯一的解释是 a UIButton(继承自UIControl)以某种方式添加了一些额外的触摸处理。在这种情况下,我想知道它的作用以及应该如何模拟它(我需要使用 aUIControl而不是 a UIButton,因为我的按钮有一个自定义视图层次结构,我不想在UIButton)。
下面的视图控制器代码应该允许任何人重现该问题:
\n\nclass ViewController: UITableViewController, UIGestureRecognizerDelegate {\n\n lazy var containerView: UIView = {\n let view: UIView = UIView()\n view.backgroundColor = UIColor.redColor()\n view.setTranslatesAutoresizingMaskIntoConstraints(false)\n view.addSubview(self.buttonContainerView)\n view.addConstraints([\n NSLayoutConstraint(item: self.buttonContainerView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.LeadingMargin, multiplier: …Run Code Online (Sandbox Code Playgroud) 我想实现UIControl的自定义子类.除了一个致使我吐牙的致命问题之外,它的工作非常精美.每当我使用sendActionsForControlEvents:发送动作消息时,它都会省略包含UIEvent.例如,如果我将其链接到具有以下签名的方法:
- (IBAction) controlTouched:(id)sender withEvent:(UIEvent *)event
Run Code Online (Sandbox Code Playgroud)
......事件总是以零回复!问题似乎发生在sendActionsForControlEvents中:
现在,我需要我的IBAction才能确定触摸的位置.我通常是通过从事件中提取触摸来实现的.当然必须有某种方法来确保交付正确的事件?这是使用UIControl的一个非常基本的部分!
有人知道法律解决方法吗?
uicontrol ×10
ios ×8
uiview ×3
cocoa-touch ×2
objective-c ×2
subclass ×2
swift ×2
callback ×1
function ×1
hittest ×1
ipad ×1
iphone ×1
matlab ×1
rx-swift ×1
uibutton ×1
uiimageview ×1
uiscrollview ×1
uistoryboard ×1
uiswitch ×1