我想将UIControls添加到UIScrollView,例如.
UIControl *couponView = [[UIControl alloc] initWithFrame:CGRectMake(drawX,drawY,couponWidth,couponHeight)];
couponView.backgroundColor = [UIColor redColor];
[[scrollView contentView] addSubview:couponView]; //may not respond
[scrollview.contentView addSubview:couponView]; //not a member
Run Code Online (Sandbox Code Playgroud)
我还想根据我添加的UIControl的数量来设置contentView的框架.我想我会在Y屏幕上远离屏幕设置框架,UIScrollView会在用户滚动时将屏幕外部分滚动到可见区域.
我在UIScrollView中没有看到contentView属性..如何访问contentView?
我在我的界面中使用了10个按钮,并且需要不时地更改按钮的选择器.
我需要使用:
-(void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
Run Code Online (Sandbox Code Playgroud)
在我更改选择器之前或者我可以使用:
-(void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
Run Code Online (Sandbox Code Playgroud)
我很担心,如果我使用addTarget改变选择:方法SAN的removeTarget:方法,我会基本上是"堆起来"我的UIButton被按下时,它开火选择.
我目前正在开发一个自定义的UIControl子类.要跟踪触摸,我使用以下方法:
- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
NSLog(@"Start");
CGPoint location = [touch locationInView:self];
if ([self touchIsInside:location] == YES) {
//Touch Down
[self sendActionsForControlEvents:UIControlEventTouchDown];
return YES;
}
else {
return NO;
}
}
Run Code Online (Sandbox Code Playgroud)
这可以按预期工作,并且@"Start"一次只能显示出来.下一步是我用UIControlEventTouchDown添加一个Target和一个Selector.
[markItem addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)
这也有效,并且调用了action:方法.但那是我的问题.该动作被调用两次.我究竟做错了什么?我只使用[self sendActionsForControlEvents:UIControlEventTouchDown];一次,目标动作被调用两次.我的代码出了什么问题?
桑德罗梅尔
我正在开发一个 iOS 应用程序,其中我需要一个 UIControl,它允许用户仅在 2 个选项和 2 个选项之间进行选择。
例如,假设我在我的应用程序中显示一个表单,用户在其中填写他的个人信息,如姓名、性别、爱好等。这里,性别是一个可能的字段,只有 2 个选项(其他选项是可能的,但假设我们不希望在我们的应用程序中使用它)。
我认为在这种情况下使用自定义版本的 UISwitch 会很好。
但是,我开始认为 UISwitch 仅适用于启用或禁用某些内容的上下文。它也可以在用户选择 2 个选项之一的上下文中使用吗?这是否违反了 Apple 的设计指南?如果是,那么我可以使用什么其他 UIControl 来做到这一点?(我想使用普通下拉菜单以外的其他东西)
我正在创建一个自定义的UIControl对象,详见此处.除触摸区外,一切运作良好.
我想找到一种方法将触摸区域限制为仅控制的一部分,在上面的示例中,我希望它仅限于黑色圆周而不是整个控制区域.
任何的想法?干杯
我正在创建GUI,我希望在那里有输入和结果.
我有text字段作为标签和/ edit或popup输入.当我有
uicontrol('style','text','string','foo','units','centimeters','position',[1 1 1 0.5]);
uicontrol('style','edit','string','foo','units','centimeters','position',[2 1 1 0.5]);
Run Code Online (Sandbox Code Playgroud)
我得到的foo字符串略有错位,text字段的基线略高于edit/ popfield 的基线.
我该如何对齐这些字段?
我想检测一下用户何时完成了“范围”滑块的移动。我尝试使用function SliderAction(sender: RangeSlider),但是在滑块中得到了每个移动点。我想我需要使用以下功能:func endTrackingWithTouch(touch: UITouch?, withEvent event: UIEvent?),但这是行不通的。我该怎么做?
iOS 14 中的新功能,我们可以将动作处理程序直接附加到 UIControl:
let action = UIAction(title:"") { action in
print("howdy!")
}
button.addAction(action, for: .touchUpInside)
Run Code Online (Sandbox Code Playgroud)
这很酷,但语法令人愤怒。我必须先形成 UIAction。我必须给 UIAction 一个标题,即使该标题永远不会出现在界面中。没有更好的办法吗?
我有一个 AVPlayerViewController ,里面有一个 AVPlayer ,我需要的是播放器的控件(播放、暂停、时间滑块)永远不会隐藏。现在,在播放视频大约 4 秒后,它们就会隐藏起来,您必须点击屏幕才能再次显示它们。我无法找到解决方案......有什么想法吗?谢谢!
在我的项目中,我有一个主视图,在其中添加了一个UITapGestureRecognizer,在这个主视图中,我有一个自定义的子视图UIControl,我将其称为UICustomButton。
重写UICustomButton以下方法UIControl:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
pressAnimation()
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
releaseAnimation()
listener?.onClick(sender: self)
}
override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesCancelled(touches, with: event)
releaseAnimation()
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,所有“点击触摸”都会触发以下回调:
touchesBegantouchesCancelled回调touchesEnded没有被调用,它有点被忽略,我不知道为什么。
我怎样才能让touchesEnded被调用而不是touchesCancelled通过触摸操作?
一些事实:
UITapGestureRecognizer,一切正常;supers并重写所有touches方法, thetouchesCancelled也会被调用 …uicontrol ×10
ios ×6
objective-c ×3
swift ×3
iphone ×2
alignment ×1
avplayer ×1
cocoa-touch ×1
formatting ×1
ios14 ×1
matlab ×1
rangeslider ×1
slider ×1
subclass ×1
uiaction ×1
uibutton ×1
uiscrollview ×1
uiswitch ×1
xcode ×1