菜鸟教程小白 发表于 2022-12-13 08:32:01

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


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

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

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

<p><strong>请注意,同一 <code>.xib</code> 中的以下控件可以正常工作:</strong></p>

<ul>
<li><code>MPVolumeView</code>(Apple 子类 <code>UISlider</code>)</li>
<li><code>UISlider</code>(为 <code>UIControlEvent</code>s <code>ValueChanged</code>、<code>TouchDown</code>、<code>TouchUpInside</code> 设置选择器code>、<code>TouchUpOutside</code>、<code>TouchCancel</code>,所有这些似乎都还在工作)</li>
<li><code>UIGestureRecognizer</code>s(即使是按钮上的单击按钮目前也可以使用)</li>
</ul>

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

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

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

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

<ol>
<li>在 4.2.1 (8C148) 上使用 PwnageTool 4.2 越狱的 iPhone 3G,基带版本 <code>05.15.04</code>,未插入 SIM:按钮未触发</li>
<li>4.3.5 (8L1) 上的 iPad 1,基带版本 <code>07.11.01</code>,SIM 已插入:按钮<em>正在触发</em></li>
<li>5.0b4 (9A5274d) 上的 iPad 2,无基带(仅限 WiFi):按钮未触发</li>
<li>4.3.4 (8K2) 上的 iPhone 4,SIM 已插入:按钮<em>正在触发</em></li>
</ol>

<p>我已经尝试从 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。</p>

<p>只有相关性我可以看到没有细胞信号 = 不工作,但这是荒谬的。为了以防万一,我关闭了设备 2 上的手机数据,但它仍然可以通过 WiFi 正常工作。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我遇到了类似的问题。原来是因为我的按钮不在 View 中。</p>

<p>我的应用处于横向模式,但 UIViewController 的 View 在某些设备和/或 iOS 版本上旋转时没有自动调整大小。</p>

<p>为了可视化问题,我在初始化 View 和按钮的地方添加了这个:</p>

<pre><code>self.view.backgroundColor = ;
</code></pre>

<p>启用此选项后,我可以看到在某些情况下没有响应按下的按钮位于 UIViewController 的 View 之外(因此没有收到事件)。</p>

<p>为了解决这个问题,我只是将它添加到我初始化 View 和按钮的位置:</p>

<pre><code>// Be sure to set the frame for this view controller to be fullscreen
CGSize winSize = .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);
</code></pre>

<p>请务必特别注意 .bounds.size 将始终返回纵向值,如果您在横向模式下操作,则必须反转它们。</p>

<p>添加后,我可以看到我的 View 覆盖了全屏,并且按钮开始响应所有设备和 iOS 版本上的事件/按下。</p>

<p>如果您使用的是 cocos2d,您可以使用它,而不必担心手动管理方向:</p>

<pre><code>CGSize winSize = [ winSize];
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 XIB 中设置但未触发的 UIButton 操作,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/6827253/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/6827253/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 XIB 中设置但未触发的 UIButton 操作