我正在爲iOS 7做一個程序,但是因爲我在幾個視圖中使用了幾乎相同的方法,所以我想創建一個覆蓋大部分方法的通用類,對於每個視圖都使用一種回調方法進行最終觸摸。我在視圖以下代碼:作爲另一個類的參數的Objective-C回調方法
// On top of the view .m
#import "Common.h"
// Method which will be called.
-(void)doSomething
{
NSLog(@"doSomething...");
[Common target:self method:@selector(callbackMethod)];
}
// Method I want to be called.
+(void)callbackMethod
{
NSLog(@"Should come here...");
}
的COMMON.H是如下:
#import <Foundation/Foundation.h>
@interface Common : NSObject
+(void)target:(Class)object method:(SEL)selector;
@end
的Common.m被如下:
+(void)target:(Class)object method:(SEL)selector
{
NSLog(@"target...");
if ([object respondsToSelector:@selector(selector)])
{
[object performSelector:@selector(selector)];
} else {
NSLog(@"%@", object);
}
}
在運行時,它只有輸出: doSomething ..., target ..., < ParentViewController:0x8d24bb0 >
這裏的問題是調用回調方法。該程序將達到Common.m中的方法,但不能從父級調用該方法。
聽起來像您需要子類化:創建超類(即UIView子類)實現所有常見的位。然後創建該類的子類,並可能覆蓋您需要自定義的方法。 'performSelector'總是有一種奇怪的氣味。或者使用公共位的類別。 – verec
@selector()是創建SEL對象的文字。既然你傳遞了一個SEL,你不需要用@selector()來包裝這個參數,你可以直接使用它。 –