UIControl 轨道触及其视图之外
Posted
技术标签:
【中文标题】UIControl 轨道触及其视图之外【英文标题】:UIControl track touches outside its view 【发布时间】:2013-08-23 04:52:34 【问题描述】:我正在构建一个菜单作为 UIControl 的子类,当用户触摸它时打开它,如果用户不选择其中一个选项,它就会关闭。
我正在寻找一种方法来跟踪用户何时触摸外部,以便我可以关闭菜单
【问题讨论】:
【参考方案1】:在菜单后面放置一个视图,以清晰的颜色背景覆盖设备的整个区域。当您的菜单打开时,使该视图可见。因为每当您在菜单外单击时,它的高度和宽度都与您的设备相同,您可以使用 TapGesture 识别该视图或将其设为 UIControl。而不是调用方法来隐藏你的菜单和那个 uiview。
希望这会有所帮助。
【讨论】:
嗯...我不认为那是我要找的。我正在寻找检测用户何时与其他控件交互。如果我制作一个与框架大小相同的框架,它将不会传输触摸。【参考方案2】:我真正喜欢做的是制作一个覆盖整个视图的大按钮,并将它放在菜单下方,或者任何我想要触摸的东西下方并让某些事情发生。
UIButton *bigBackButton = [[UIButton alloc]initWithFrame:self.view.frame];
[bigBackButton addTarget:self action:@selector(backButtonSelected) forControlEvents:UIControlEventTouchDown];
[bigBackButton setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]];
[self.view addSubview:bigBackButton];
- (void)backButtonSelected:(UIButton *)button
//get rid of the button
[button removeFromSuperview];
//do whatever else you need to do
[yourmenu dosomething];
在某些应用程序上,我会将按钮设置为暗色和半透明以突出显示菜单,无论其他。其他时候我会让它几乎不可见,比如[UIColor colorWithWhite:1.0 alpha:0.01];
在您的菜单例程中,您可以添加这些相同的例程。如果您的菜单是 UIView 的子类,您可以传递父视图的框架,或者只是在 layoutSubviews 例程中查找它。
在你的 layoutSubviews 中,添加:
UIButton *bigBackButton = [[UIButton alloc]initWithFrame:self.superview.frame];
[bigBackButton addTarget:self action:@selector(backButtonSelected) forControlEvents:UIControlEventTouchDown];
[bigBackButton setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]];
[self.view addSubview:bigBackButton];
然后将 backButtonSelected 方法也放入您的菜单类中。
【讨论】:
嗯....我想到了类似的东西,但我正在寻找它在我的菜单类的实现中。这样我就可以随时将它添加到我不想要的任何视图中,而不必担心添加其他东西来使它工作。 没有理由不能将这些例程添加为菜单类的一部分。 (见编辑)以上是关于UIControl 轨道触及其视图之外的主要内容,如果未能解决你的问题,请参考以下文章
iPhone:存储和检索连接到 UIControl 的 NSManagedObject 的最佳方式
使用自定义 UIControl 自动调整 UIScrollView 内容偏移