我在我的應用程序中有許多UITableViewController子類。如何使用方法swizzle或子類
現在我只需要修改它們全部在所有情況下添加+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;
}
但它取代超功能,不會在子類中調用,所以這是行不通的。有沒有辦法做到我想要的,而不修改所有的子類?
+1。我從來沒有想過方法混合的子類方法,這讓我非常好奇。你可以舉幾個代碼示例來說明如何做到這一點?對不起,因爲我不是原來的海報。但我只是很好奇。提前致謝。 – Unheilig
我懷疑你會在隨時可用的代碼中找到樣本。正如我所指出的那樣,這是一種危險而脆弱的做法。但是我所描述的是調用'objc_getClassList',然後使用-isKindOfClass:遍歷層次結構尋找所需類的子類,然後修改它們。 (但請注意:以後可能會添加類,並且不會收到通知。)如果您需要這樣瘋狂的事情,更好的方法就是KVO所做的事情,即每個對象(而不是每個類)的ISA混搭:https ://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVOImplementation.html –