2011-10-12 100 views
1

假設我有一個具有以下結構的類,並且我希望覆蓋它的一個委託方法(或更多,通常是它的一個公共方法),但現在它基於一些私人方法。有沒有辦法擴展它,或者我應該簡單地斷定它的設計沒有可擴展性?如何擴展基於私有方法的類方法

MyBaseClass.h:

@interface MyBaseClass : UIView <UITableViewDataSource, UITableViewDelegate> 
{ 

} 

// some public methods 

@end 

MyBaseClass.m:

@interface MyBaseClass (Private) 
- (void)_privateMethod1; 
- (void)_privateMethod2; 
@end 

#pragma mark - UITableViewDataSource 

// ------ I'D LIKE TO CHANGE THE BEHAVIOR OF THIS METHOD EXTENDING MyBaseClass 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)rowIndexPath { 
    [self _privateMethod1]; 
    [self _privateMethod2]; 
} 

@end 

我還需要參考的私有方法,如果我實際上將延伸類的貫徹,但顯然我不想要訪問任何私有方法。 如果問題聽起來有點瑣碎,我很抱歉。

感謝

回答

3

您可以在一個單獨的頭MyBaseClassPrivate.h,而不是在實現文件中聲明你的私有方法和導入的子類。

+0

是的,它現在可以工作,謝謝! – ggould75

0

不能創建在聲明子類應該實現方法的協議?基類將採用該協議;並且子類負責其各自的實現。基類的實現可以提供一些通用的功能,或只是return;

@protocol MyBaseClassPrivateProtocol 
- (void)_privateMethod1; 
- (void)_privateMethod2; 
@end 

@interface MyBaseClass : UIViewController <MyBaseClassPrivateProtocol> 

@end 
+0

這有問題,例如,如果您正在構建框架並且不希望使用它的人知道MyBaseClassPrivateProtocol – jbat100