• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 在 XIB 中设置但未触发的 UIButton 操作

[复制链接]
菜鸟教程小白 发表于 2022-12-13 08:32:01 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

问题描述很简短,但我想我不需要多说。当我加载自定义电影播放器​​的 .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(为 UIControlEvents ValueChangedTouchDownTouchUpInside 设置选择器code>、TouchUpOutsideTouchCancel,所有这些似乎都还在工作)
  • UIGestureRecognizers(即使是按钮上的单击按钮目前也可以使用)

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

  • 现在使用 AVPlayerLayer 作为顶级 View 的 layerClass(因此顶级 View 也是子类 UIView)。这是为了解决一些电影加载问题/视觉滞后问题。

这实际上是所有的改变,至少我能想到的.. 我也尝试过移除并重新连接 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap