2014-02-11 48 views
9

問題:當用戶敲擊在一個UITableViewCell一個UIButton,按鈕將只強調上長按,而不是一個快速的水龍頭。無論點擊持續時間如何,此按鈕所需的行爲都會突出顯示。的UIButton中的UITableViewCell不上自來水突出

不幸的是:因爲其他不良的副作用,在任何UIScrollView或UITableView上將delayContentTouches設置爲NO是不可取的。

So:我該如何解決這個問題 - 有沒有一種方法可以將觸摸轉發到按鈕,繞過delaysContentTouches值?

回答

0

在原型單元格中將按鈕的標籤設置爲「1」。

在你的cellForRowAtIndexPath你應該UIButton的鏈接方法:

UIButton *button = (UIButton *)[cell viewWithTag:1]; 
[button addTarget:self action:@selector(aMethod:) forControlEvents:UIControlEventTouchUpInside]; 

則在該方法你要做的就是:

-(void) aMethod: (id) sender{ 


    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.cartTableView]; 
    NSIndexPath *indexPath = [self.cartTableView indexPathForRowAtPoint:buttonPosition]; 
    if (indexPath != nil) 
    { 
     //Do your stuff 
    } 
} 

運行代碼之前,這將不會增加任何延遲。

+0

OP詢問如何突出顯示快速點擊按鈕。你的建議不會那樣做。 –

+0

它適合我...並在多個應用程序上工作... – Mika

0

您需要創建一個UIButton類別(或者子類,如果您不想影響所有其他按鈕),並在touchesBegan中設置highlight = YES。

有關示例實現,請參閱this answer中的代碼。

0

這爲我工作:

@weakify(self); 
[self.publishButton bk_addEventHandler:^(id sender) { 
    @strongify(self); 
    if (self.clickBlock) { 
     self.clickBlock(self.draftModel); 
    } 
    [UIView animateWithDuration:0.1 animations:^{ 
     self.publishButton.backgroundColor = [UIColor whiteColor]; 
    }]; 
} forControlEvents:UIControlEventTouchUpInside]; 

[self.publishButton bk_addEventHandler:^(id sender) { 
    self.publishButton.backgroundColor = [UIColor redColor]; 
} forControlEvents:UIControlEventTouchDown]; 
0

使用主線程。

dispatch_async(dispatch_get_main_queue(), ^{ 

    }); 
相關問題