2012-08-15 33 views
0

我有一個增加數量的按鈕,當我點擊它時,我會撥打服務電話。問題是,如果我多次點擊它,我只想在完成點擊後撥打服務電話。我試過使用UITapGestureRecognizer,但我不知道如何計算水龍頭的數量。使用UITapGestureRecognizer計算水龍頭的數量

任何幫助,將不勝感激。

下面是示例代碼

- (void)quantityChanged:(UITapGestureRecognizer *)tapRecognizer { 
    static NSUInteger numberOfTaps; 
    if (tapRecognizer.state == UIGestureRecognizerStateBegan) { 
     numberOfTaps = 0; 
    } 
    if (tapRecognizer.state == UIGestureRecognizerStateEnded) 
     NSLog(@"%d",numberOfTaps); 
    if (tapRecognizer.state == UIGestureRecognizerStateChanged) 
     numberOfTaps++; 

}

+0

聽起來有點像用戶界面的一個奇怪的想法 - 但也許我沒有得到它。你是否想要一個用戶點擊(快速)按鈕,並且如果沒有其他點擊一段時間,它需要點擊的數量,並調用其他方法,並將點擊數作爲參數? – 2012-08-15 06:59:22

+0

是的,問題是我不想在每個水龍頭上進行Web服務調用,但是要計算水龍頭的數量,並在進行Web服務調用時相應地更改數量。 – Cosmin 2012-08-15 07:02:58

+0

@Cosmin我的用例也一樣。我結束了使用performSelector:withObject:afterDelay和cancelPreviousPerformRequestsWithTarget方法 – Shantanu 2014-11-15 08:45:39

回答

0

確定。所以我找到了解決我的問題的方法。我將執行我的Web服務調用,延遲0.5秒,每次按下我的按鈕時,我將取消所有正在等待執行的選擇器,並再次調用performSelector:withDelay。

4

有四種可能的解決方案

我覺得你的方法是好的

- (void)quantityChanged:(UITapGestureRecognizer *)tapRecognizer { 

    static NSUInteger numberOfTaps; 


    if (tapRecognizer.state == UIGestureRecognizerStateEnded) { 

     numberOfTaps ++; 

     NSLog(@"web service call with %d",numberOfTaps); 
    } 

} 

查看日誌

web service call with 1 
web service call with 2 
web service call with 3 
web service call with 4 

取出quantityChanged UITapGestureRecognizer後觸發它的一個

我的意思是,從發送對象中刪除UITapGestureRecognizer(該quantityChanged方法中第一個Web服務後)

然後添加UITapGestureRecognizer在您獲得第一次網絡服務響應後再次向發件人發送。

使用UILongPressGestureRecognizer。這是一個漫長的事件過程。請檢查事件狀態,其開始,完成等,並編寫您的代碼。

- (IBAction)longPressDetected:(UIGestureRecognizer *)gestureRecognizer {   

    if (gestureRecognizer.state == UIGestureRecognizerStateBegan){ 

     NSLog(@"Long press began"); 

    } else if (gestureRecognizer.state == UIGestureRecognizerStateRecognized) { 

      NSLog(@"Long press UIGestureRecognizerStateRecognized"); 
    } 
    else if (gestureRecognizer.state == UIGestureRecognizerStateEnded) { 

     NSLog(@"Long press Ended"); 
    } 
    else { 

     NSLog(@"Long press detected."); 
    }  
} 

設置numberOfTapsRequired爲UITapGestureRecognizer

UITapGestureRecognizer *doubleTapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(beginComicTransitions:)] autorelease];  
doubleTapRecognizer.numberOfTapsRequired = 2; 
doubleTapRecognizer.numberOfTouchesRequired = 1; 
doubleTapRecognizer.delegate = self; 
+0

您不明白我的問題。我想計算一下我的UIButton上的水龍頭數量。使用你所說的只觸發我的選擇器,如果按鈕被輕敲至少兩次。這不是我需要的。 – Cosmin 2012-08-15 07:00:20

+0

請描述一下這句話:「問題是,如果我多次點擊它,我只想在完成點擊後進行服務調用。」那麼我們可以幫助你..任何示例代碼..? – 2012-08-15 07:07:29

+0

是的,問題是我不想在每個水龍頭上進行Web服務調用,但要計算水龍頭的數量,並在進行Web服務調用時相應地更改數量。 – Cosmin 2012-08-15 07:08:48

1

即使我懷疑這會導致一個實用的用戶界面......如果你有一個用戶可以「放入」的最大數量的想法,你可以去幾個點擊手勢聽衆,你依賴於彼此用- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizerdoc here)。

的代碼看起來是這樣的:

-(void)addGestureRecognizers 
{ 
    int maxCount = 10; 
    UITapGestureRecognizer *other = nil; 
    for(int i = maxCount; i < 0; i--) 
    { 
    UITapGestureRecognizer *tapper = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapped:)]; 
    tapper.numberOfTapsRequired = i; 
    if(other) 
    { 
     [tapper requireGestureRecognizerToFail:other]; 
    } 
    [self.view addGestureRecognizer:tapper]; 
    other = tapper; 
    } 
} 

-(void)tapped:(UITapGestureRecognizer *)tapper 
{ 
    [self callWebservice:tapper.numberOfTapsRequired]; 
} 

我沒有測試它,從來沒有與工作,但是這就是我從文檔的理解。