从 XCode 4.2 中的单一 View iOS 模板开始,我在我的 .xib 中添加了第二个 View ,在主视图上添加了一个“ super ”按钮,在 subview 上添加了一个“子”按钮。我希望能够同时单击这两个按钮。
在 View Controller 的界面中,我添加了:
IBOutlet UIView *subView;
然后在我的 View Controller 的 viewDidLoad 方法中,我添加:
[self.view addSubview:subView];
在[super viewDidLoad]之后;
subView 的背景为“clear”,两个窗口都设置为“User Interaction Enabled”。
当我运行应用程序时,只有“子”按钮是可点击的。我可以看到“ super ”按钮,但它似乎没有接收到触摸,据我从 Apple 的文档中可以看出,这应该是默认行为( View 的透明区域应该允许触摸通过)。
最佳答案
这不会发生,如果你把一个 View 放在另一个 View 前面,后面的 View 将不会接收到触摸。
您可以在前 View 中禁用用户交互,以便后 View 接收触摸。
但我认为你想要 frontview 和 backview 可点击,在这种情况下你需要做的是获取触摸并将其发送到 backview,并在 backview 中处理它。
我不知道你想做什么,但我认为,你可能可以做出比这更好的选择。
您可以在 stackoverflow 中查看此问题: detect touch on a view behind another view?
编辑:
您有很多选择来发送触摸。
你可以做类似的事情(这不是一个好的选择):
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
for (UITouch *touch in touches) {
for(UIView* v in self.view.subviews){
if([v pointInside:[touch locationInView:self.view] withEvent:event]){
if ([v isKindOfClass:[UIButton class]]) {
[(UIButton*)v sendActionsForControlEvents:UIControlEventTouchUpInside];
}
}
}
}
}
您还可以编辑 View 框架,使 View 不会覆盖按钮。
您还可以将按钮带到新 subview 的前面,执行以下操作:
[self.view addSubview:yourSubview];
[self.view bringSubviewToFront:yourButton];
你只需要发挥你的创造力;)
关于objective-c - 添加 SubView 后在 SuperView 中获取 Touches,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9833078/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
我有一个ModularSinatra应用程序,我正在尝试将Bootstrap添加到应用程序中。get'/bootstrap/application.css'doless:"bootstrap/bootstrap"end我在views/bootstrap中有所有less文件,包括bootstrap.less。我收到这个错误:Less::ParseErrorat/bootstrap/application.css'reset.less'wasn'tfound.Bootstrap.less的第一行是://CSSReset@import"reset.less";我尝试了所有不同的路径格式,但它
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el