gpt4 book ai didi

ios - 如何在子类上使用方法调配或其他东西

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:45 26 4
gpt4 key购买 nike

我的应用程序中有许多 UITableViewController 子类。

现在我只需要修改它们以在所有情况下添加 +1 行,并且在所有情况下添加一个简单的相等行。

我不想手动修改所有这些,更好的方法似乎是替换 UITableViewDataSource 方法来修改值,如下所示:

+(void)load {
[[self class] jr_swizzleMethod:@selector(tableView:numberOfRowsInSection:) withMethod:@selector(swizzledTableView:numberOfRowsInSection:) error:nil];
}

- (NSInteger)swizzledTableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self swizzledTableView:tableView numberOfRowsInSection:section] + 1;
}

但它替换了父类(super class)函数,不在子类中调用,所以这是行不通的。有没有办法在不修改所有子类的情况下做我想做的事?

最佳答案

您需要专门调配每个子类。您可以通过使用 objc_getClassList 在运行时内省(introspection)类层次结构来找到它们,但我无法描述这种方法有多么危险和脆弱。您正在尝试将其应用于系统中的每个 TableView ,您希望这只是您想要的 TableView (即您的 TableView )。但是系统或第三方库可能使用的 TableView 呢?你也在修改它们。当你试图理解由此导致的崩溃时,堆栈跟踪将因为困惑而变得难以理解。

为了让它工作,tableView:cellForRowAtIndexPath: 还需要正确处理这个额外的行,所以如果不这样做,很难看出系统中的每个 TableView Controller 将如何正确实现知道这个 +1。

要么将您的 TableView Controller 子类化(并让它们调用 super),要么使用一个单独的对象,如果需要,它们都会调用该对象来添加额外的行。这个其他对象(或父类(super class))也是您应该处理这个额外行的单元格的地方。

关于ios - 如何在子类上使用方法调配或其他东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21661595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com