问题描述很简短,但我想我不需要多说。当我加载自定义电影播放器的 .xib 时,UIButton/UIBarButtonItem 控件设置为我的 File's Owner 对象的 ivars/properties,并且它们还设置了它们的操作/选择器各种局部方法。该函数从未进入(gdb 断点未命中)。
我已验证 setView: 和 set...Button: 正在被调用(尚未调查它们是否为 nil)。我还尝试在 UI 初始化时手动调用 addTarget:action:forControlEvents: /setAction: ,但无济于事。
这里也有额外的奇怪之处:按钮实际上突出显示,然后保持突出显示。因此它们从 UIControlStateNormal 过渡到 UIControlStateHighlighted (/UIControlStateSelected ,取决于单击的滚动方式),但在 UIControlEventTouchUpInside 否则会触发按钮的操作,按钮似乎仍处于突出显示/选中状态。
请注意,同一 .xib 中的以下控件可以正常工作:
MPVolumeView (Apple 子类 UISlider )
UISlider (为 UIControlEvent s ValueChanged 、TouchDown 、TouchUpInside 设置选择器code>、TouchUpOutside 、TouchCancel ,所有这些似乎都还在工作)
UIGestureRecognizer s(即使是按钮上的单击按钮目前也可以使用)
这曾经有效,那么从那时起 .xib 中发生了什么变化?嗯:
- 现在使用 AVPlayerLayer 作为顶级 View 的
layerClass (因此顶级 View 也是子类 UIView )。这是为了解决一些电影加载问题/视觉滞后问题。
这实际上是所有的改变,至少我能想到的.. 我也尝试过移除并重新连接 IB 中的 socket 。也欢迎不一定是解决方案的想法!
编辑:好的,下面是它在哪些设备中工作/损坏的概述。模拟器没有测试,因为我有 .a 库,其中只有 armv6 /armv7 编译的架构。
- 在 4.2.1 (8C148) 上使用 PwnageTool 4.2 越狱的 iPhone 3G,基带版本
05.15.04 ,未插入 SIM:按钮未触发
- 4.3.5 (8L1) 上的 iPad 1,基带版本
07.11.01 ,SIM 已插入:按钮正在触发
- 5.0b4 (9A5274d) 上的 iPad 2,无基带(仅限 WiFi):按钮未触发
- 4.3.4 (8K2) 上的 iPhone 4,SIM 已插入:按钮正在触发
我已经尝试从 iOS 4.3 (Xcode 4.0.2 4A2002a) 和 iOS 5.0b4 (Xcode 4.2 4C139) 部署到设备 1 和 2,这两种情况下的结果相同(手机不工作,pad 工作)。我还尝试从设备 1 和 2 上完全卸载应用程序并进行干净的构建,重新安装时的结果相同。我仅从 Xcode 4.2 部署到设备 3,仅从 Xcode 4.0.2 部署到设备 4。
只有相关性我可以看到没有细胞信号 = 不工作,但这是荒谬的。为了以防万一,我关闭了设备 2 上的手机数据,但它仍然可以通过 WiFi 正常工作。
Best Answer-推荐答案 strong>
我遇到了类似的问题。原来是因为我的按钮不在 View 中。
我的应用处于横向模式,但 UIViewController 的 View 在某些设备和/或 iOS 版本上旋转时没有自动调整大小。
为了可视化问题,我在初始化 View 和按钮的地方添加了这个:
self.view.backgroundColor = [UIColor colorWithRed:1.0f green:0.0f blue:1.0f alpha:0.4f];
启用此选项后,我可以看到在某些情况下没有响应按下的按钮位于 UIViewController 的 View 之外(因此没有收到事件)。
为了解决这个问题,我只是将它添加到我初始化 View 和按钮的位置:
// 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 将始终返回纵向值,如果您在横向模式下操作,则必须反转它们。
添加后,我可以看到我的 View 覆盖了全屏,并且按钮开始响应所有设备和 iOS 版本上的事件/按下。
如果您使用的是 cocos2d,您可以使用它,而不必担心手动管理方向:
CGSize winSize = [[CCDirector sharedDirector] winSize];
关于ios - 在 XIB 中设置但未触发的 UIButton 操作,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/6827253/
|