ヘッダーファイルにアクセスできないクラスにカテゴリを追加する方法はありますか?
テストの目的で、にカテゴリを追加したいのですUITableViewCellDeleteConfirmationControlが、クラスは(私が知る限り)プライベートフレームワークの一部です。
どうやってやるの?
精緻化(mihiriosの要求による):
フランクテストフレームワークを拡張して、を削除しようとしたときに表示される確認ボタン(大きな赤い[削除]ボタン)のタップをシミュレートしようとしていますUITableViewCell。tapフランクはにメソッドを追加しUIControlます。UITableViewCellDeleteConfirmationControl何らかの理由で、コントロールをタップするフランクの通常の方法は、クラス(サブクラス)では機能しませんUIControl。
回避策を作成しました。UITableViewCell次の方法で、にカテゴリを追加しました。
- (BOOL)confirmDeletion {
if (![self showingDeleteConfirmation]) {
return NO;
}
UITableView *tableView = (UITableView *)[self superview];
id <UITableViewDataSource> dataSource = [tableView dataSource];
NSIndexPath *indexPath = [tableView indexPathForCell:self];
[dataSource tableView:tableView
commitEditingStyle:UITableViewCellEditingStyleDelete
forRowAtIndexPath:indexPath];
return YES;
}
これにより、テーブルのデータソースが検出され、そのtableView:commitEditingStyle:forRowAtIndexPath:メソッドが呼び出されます。これは、(のドキュメントによるとUITableView)ユーザーが確認ボタンをタップしたときにシステムが実行する操作です。
これは機能しますが、フランクのデフォルトのボタンをオーバーライドして、メソッドをUITableViewCellDeleteConfirmationControl追加することにより、タップ可能なボタンのように見せたいと思います。tapこのtapメソッドは、確認ボタンを含むセルを見つけて、を呼び出し[cell confirmDeletion]ます。
のカテゴリを宣言しようとするとUITableViewCellDeleteConfirmationControl、コンパイラは「インターフェイス'UITableViewCellDeleteConfirmationControl'を解決できない」と文句を言います。
誰かがclass-dumpを使用して生成したヘッダーファイルを使用しようとすると、リンカーはシンボル_OBJC_CLASS _ $_UITableViewCellDeleteConfirmationControlが見つからないと文句を言います。