OStack程序员社区-中国程序员成长平台

标题: ios - 在 XIB 中设置但未触发的 UIButton 操作 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 08:32
标题: ios - 在 XIB 中设置但未触发的 UIButton 操作

问题描述很简短,但我想我不需要多说。当我加载自定义电影播放器​​的 .xib 时,UIButton/UIBarButtonItem 控件设置为我的 File's Owner 对象的 ivars/properties,并且它们还设置了它们的操作/选择器各种局部方法。该函数从未进入(gdb 断点未命中)。

我已验证 setView:set...Button: 正在被调用(尚未调查它们是否为 nil)。我还尝试在 UI 初始化时手动调用 addTarget:action:forControlEvents:/setAction:,但无济于事。

这里也有额外的奇怪之处:按钮实际上突出显示,然后保持突出显示。因此它们从 UIControlStateNormal 过渡到 UIControlStateHighlighted(/UIControlStateSelected,取决于单击的滚动方式),但在 UIControlEventTouchUpInside 否则会触发按钮的操作,按钮似乎仍处于突出显示/选中状态。

请注意,同一 .xib 中的以下控件可以正常工作:

这曾经有效,那么从那时起 .xib 中发生了什么变化?嗯:

这实际上是所有的改变,至少我能想到的.. 我也尝试过移除并重新连接 IB 中的 socket 。也欢迎不一定是解决方案的想法!

编辑:好的,下面是它在哪些设备中工作/损坏的概述。模拟器没有测试,因为我有 .a 库,其中只有 armv6/armv7 编译的架构。

  1. 在 4.2.1 (8C148) 上使用 PwnageTool 4.2 越狱的 iPhone 3G,基带版本 05.15.04,未插入 SIM:按钮未触发
  2. 4.3.5 (8L1) 上的 iPad 1,基带版本 07.11.01,SIM 已插入:按钮正在触发
  3. 5.0b4 (9A5274d) 上的 iPad 2,无基带(仅限 WiFi):按钮未触发
  4. 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-推荐答案


我遇到了类似的问题。原来是因为我的按钮不在 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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4