菜鸟教程小白 发表于 2022-12-12 20:40:22

objective-c - 如何将类别添加到 "hidden"类


                                            <p><p>有没有办法将类别添加到您无法访问其头文件的类?</p>

<p>出于测试目的,我想向 <code>UITableViewCellDeleteConfirmationControl</code> 添加一个类别,但该类(据我所知)是私有(private)框架的一部分。</p>

<p>我该怎么做?</p>

<hr/>

<p>详细说明(根据 mihirios 的要求):</p>

<p>我正在尝试扩展 Frank 测试框架,以模拟点击当您尝试删除 <code>UITableViewCell</code> 时出现的确认按钮(大红色“删除”按钮)。 Frank 将 <code>tap</code> 方法添加到 <code>UIControl</code>。出于某种原因,Frank 通常点击控件的方式不适用于 <code>UITableViewCellDeleteConfirmationControl</code> 类(它是 <code>UIControl</code> 的子类)。</p>

<p>我已经创建了一个解决方法。我在 <code>UITableViewCell</code> 中添加了一个类别,方法如下。</p>

<pre><code>- (BOOL)confirmDeletion {
    if (!) {
      return NO;
    }
    UITableView *tableView = (UITableView *);
    id &lt;UITableViewDataSource&gt; dataSource = ;
    NSIndexPath *indexPath = ;
    [dataSource tableView:tableView
       commitEditingStyle:UITableViewCellEditingStyleDelete
      forRowAtIndexPath:indexPath];
    return YES;
}
</code></pre>

<p>这会找到表的数据源并调用它的 <code>tableView:commitEditingStyle:forRowAtIndexPath:</code> 方法,该方法(根据 <code>UITableView</code> 的文档)是系统在用户点击确认按钮。</p>

<p>这可行,但我希望通过向 <code>UITableViewCellDeleteConfirmationControl</code> 添加一个 <code>tap</code> 方法来使 <code>UITableViewCellDeleteConfirmationControl</code> 看起来是一个可点击按钮,覆盖 Frank 的默认方法。 <code>tap</code> 方法会找到包含确认按钮的单元格,然后调用 <code></code>。</p>

<p>当我尝试为 <code>UITableViewCellDeleteConfirmationControl</code> 声明一个类别时,编译器提示它“无法解析接口(interface) 'UITableViewCellDeleteConfirmationControl'。”</p>

<p>当我尝试使用某人使用类转储生成的头文件时,链接器提示它找不到符号 _OBJC_CLASS_$_UITableViewCellDeleteConfirmationControl。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>出于测试目的,您始终可以使用 <code>NSClassFromString</code> 获取类对象,然后使用 <code>class_replaceMethod</code> 运行时方法来执行您需要的任何操作。见 <a href="https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html#//apple_ref/doc/uid/TP40001418" rel="noreferrer noopener nofollow">Objective-C Runtime Reference</a>了解详情。</p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - 如何将类别添加到&#34;hidden&#34;类,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/10361332/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/10361332/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - 如何将类别添加到 &#34;hidden&#34;类