问题描述很简短,但我想我不需要说太多。当我加载自定义电影播放器的.xib
时,UIButton / UIBarButtonItem控件设置为我的File's Owner
对象的ivars / properties,并且它们的操作/选择器也设置为各种本地方法。永远不会输入该函数(未命中gdb断点)。
我已经验证了setView:
和set...Button:
被调用(尚未调查它们是否为零)。我还尝试在UI初始化时手动调用addTarget:action:forControlEvents:
/ setAction:
,但无济于事。
这里也有额外的奇怪之处:按钮实际上突出显示,然后保持突出显示。因此,他们会从UIControlStateNormal
转换为UIControlStateHighlighted
(/ UIControlStateSelected
,具体取决于单个点按滚动的方式),但是在UIControlEventTouchUpInside
上会触发按钮的操作,按钮似乎保持在突出显示/选中状态。
请注意,相同.xib
中的以下控件无问题:
MPVolumeView
(Apple-subclassed UISlider
)UISlider
(为UIControlEvent
ValueChanged
TouchDown
,TouchUpInside
,TouchUpOutside
,TouchCancel
,UIGestureRecognizer
设置选择器,所有这些似乎仍然有效).xib
s(即使按钮上的单击按钮当前有效)这曾经有用,那么layerClass
之后发生了什么变化?良好:
UIView
(因此顶级视图也是子类.a
)。这是为了修复一些电影加载的笨拙/视觉滞后。这几乎就是所有改变了,至少我能想到的是......我也尝试过删除并重新连接IB中的插座。不一定是解决方案的想法也受到欢迎!
编辑:好的,所以这里概述了它正在工作/中断的设备。模拟器未经过测试,因为我的armv6
个库只有armv7
/ { {1}}编译的体系结构。
05.15.04
,未插入SIM卡:按钮未触发07.11.01
,已插入SIM卡:按钮 触发我尝试从iOS 4.3(Xcode 4.0.2 4A2002a)和iOS 5.0b4(Xcode 4.2 4C139)部署到设备1和2,两种情况都相同(手机不起作用,打击垫工作)。我也尝试从设备1和2完全卸载应用程序并进行干净的构建,重新安装时的结果相同。设备3我仅部署到Xcode 4.2,而设备4仅部署在Xcode 4.0.2中。
只有相关性我可以看到没有细胞信号=不起作用,但这是荒谬的。为了防万一,我在设备2上关闭了单元格数据,但它仍然可以在WiFi上正常工作。
答案 0 :(得分:2)
我有类似的问题。结果是因为我的按钮不在视图中。
我的应用程序处于横向模式,但在某些设备和/或iOS版本上旋转时,UIViewController的视图未自动调整大小。
为了可视化问题,我在初始化视图和按钮时添加了这个:
self.view.backgroundColor = [UIColor colorWithRed:1.0f green:0.0f blue:1.0f alpha:0.4f];
有了这个,我可以看到在某些情况下没有响应按钮的按钮超出了UIViewController的视图(因此没有得到事件)。
要解决此问题,我只是将其添加到初始化视图和按钮的位置:
// Be sure to set the frame for this view controller to be fullscreen
CGSize winSize = [UIScreen mainScreen].bounds.size;
// Note that we switched height and width...this is because
// these values are always for portrait mode
self.view.frame = CGRectMake(0.0f, 0.0f, winSize.height, winSize.width);
请务必特别注意[UIScreen mainScreen] .bounds.size将始终返回纵向值,如果您在横向模式下操作,则必须将其反转。
添加之后,我可以看到我的视图覆盖了整个屏幕,按钮开始响应所有设备和iOS版本上的事件/按下。
如果您使用的是cocos2d,您可以使用它而不必担心手动管理方向:
CGSize winSize = [[CCDirector sharedDirector] winSize];
答案 1 :(得分:1)
让我猜你使用UIGestureRecognizer。
你必须使用UIGestureRecognizerDelegate并告诉识别器在用户点击按钮时不要触发。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UIButton class]]){
return NO;
}
return YES;
}
这解决了我的问题!
答案 2 :(得分:0)
将所有基于selector
/ action
的回调切换为UIGestureRecognizer
,而不是解决了这个问题。仍然不确定为什么它不起作用。