2011-08-15 49 views
0

的方法我在一個項目上工作了iPhone的iOS 4和Xcode 4呼叫從UIButton的子類@implementation

我有子類一個UIButton,使其攔截單和雙擊。

這是UIButton子類的@implementation的最後一部分,兩個實例方法,其中的「水龍頭」被「記錄」;

- (void) handleTap: (UITapGestureRecognizer *) sender { 
    NSLog(@"single tap"); 
} 

- (void) handleDoubleTap :(UITapGestureRecognizer *) sender { 
    NSLog(@"double tap"); 
} 

按鈕實例在筆尖創建和一切工作正常:它攔截單一的水龍頭,並雙擊和輸出的NSLog的。

現在的問題:我在我的ViewController中有兩個方法(resetAllFields和populateAllFields),我需要單擊tap執行resetAllFields並雙擊執行populateAllFields。

我該怎麼辦?我在哪裏打電話?

謝謝。

回答

2

如果您想要處理ViewController中的行爲,典型的解決方案是在自定義按鈕類中添加一個@protocol,該類定義處理單擊和雙擊的方法。

在CustomButton.h

@protocol CustomButtonDelegate <NSObject> 
    - (void)button:(CustomButton *)button tappedWithCount:(int)count; 
@end 

然後,您可以在您的自定義按鈕類實現此協議的委託和被檢測到你的水龍頭時要調用的委託這些方法

即。

在CustomButton.h在你的實現方法

id <CustomButtonDelegate> _delegate; 

比實現協議的方法和設置本身作爲自定義按鈕的委託
- (void) handleTap: (UITapGestureRecognizer *) sender { 
    NSLog(@"single tap"); 
    [self.delegate button:self tappedWithCount:1]; 
} 

- (void) handleDoubleTap :(UITapGestureRecognizer *) sender { 
    NSLog(@"double tap"); 
    [self.delegate button:self tappedWithCount:2]; 
} 

您的視圖控制器。

即。在ViewControllers實現

- (void)button:(CustomButton *)button tappedWithCount:(int)count { 
    if (count == 1) { 
     [self resetAllFields]; 
    } else if (count == 2) { 
     [self populateAllFields]; 
    } 
} 

由於您使用的界面生成器來設置自定義按鈕,你可以指定你的視圖控制器作爲一個代表在那裏或在viewDidLoad中。

+0

謝謝。我是一個新手,所以我需要更多關於委託的解釋。我如何創建它們? – boscarol

+0

編輯答案添加更多信息 – MarkPowell

+0

糟糕,現在我看到您的完整答案。謝謝。 – boscarol