iOS-關(guān)于Cell上Button點(diǎn)擊效果

在iOS開發(fā)中,我曾遇到這樣一個問題,很久都未能解決,就是在cell上添加一個button,當(dāng)我們點(diǎn)擊button時,它是沒有高亮效果的,除非我們長按button,我這里整理一下解決這個問題的方法
原文鏈接: http://stackoverflow.com/questions/19256996/uibutton-not-showing-highlight-on-tap-in-ios7
解決方案一:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"Button點(diǎn)擊效果測試";
    
    self.tableView.delaysContentTouches = NO;
    
    // iOS7
    for (id view in self.tableView.subviews)
    {
        if ([NSStringFromClass([view class]) isEqualToString:@"UITableViewWrapperView"])
        {
            if([view isKindOfClass:[UIScrollView class]])
            {
                UIScrollView *scroll = (UIScrollView *) view;
                scroll.delaysContentTouches = NO;
            }
            break;
        }
    }
    
    // iOS8 注意,本人測試系統(tǒng)iOS10,沒有走這個方法,走上面那個方法
    for (id view in self.tableView.subviews)
    {
        if ([NSStringFromClass([view class]) isEqualToString:@"UITableViewCellScrollView"])
        {
            if([view isKindOfClass:[UIScrollView class]])
            {
                UIScrollView *scroll = (UIScrollView *) view;
                scroll.delaysContentTouches = NO;
            }
            break;
        }
    }
    
    // 該方式相當(dāng)于上面兩個循環(huán)的合集,并且實現(xiàn)方式更加優(yōu)雅,推薦使用它,而不是使用上面兩個循環(huán)
    for (id obj in self.tableView.subviews) {
        if ([obj respondsToSelector:@selector(setDelaysContentTouches:)]) {
            [obj setDelaysContentTouches:NO];
        }
    }
}

解決方案二:

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [super touchesBegan:touches withEvent:event];
    [NSOperationQueue.mainQueue addOperationWithBlock:^{ self.highlighted = YES;}];
}

-(void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [super touchesCancelled:touches withEvent:event];
    [self performSelector:@selector(setDefault) withObject:nil afterDelay:0.1];
}

-(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [super touchesEnded:touches withEvent:event];
    [self performSelector:@selector(setDefault) withObject:nil afterDelay:0.1];
}

- (void)setDefault
{
    [NSOperationQueue.mainQueue addOperationWithBlock:^{ self.highlighted = NO; }];
}

該方案比較簡單粗暴,我們創(chuàng)建一個UIButton的分類,然后將它導(dǎo)入pch文件中,就徹底解決了button的點(diǎn)擊效果問題,比起方案一要簡單一些

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近做項目老大說要把所有可以點(diǎn)到的按鈕加上觸摸反饋,但是遇到一個問題,就是我的cell上添加一個button,當(dāng)我...
    愛吃魚的小灰閱讀 1,390評論 1 4
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實...
    香橙柚子閱讀 24,726評論 8 183
  • 我是個“壞”孩子。屬于那種學(xué)習(xí)不好,又有個性的壞孩子。也許在我們同齡人看來這并不算什么,因為我重來沒有做過任何的甚...
    墨憶筆尖閱讀 222評論 0 0
  • 1.TS晨讀打卡06:35 愛是命中注定,我們無法獨(dú)自找到人生真諦,而需要和愛人一起?!獪斔埂つD。過未過的生...
    晨讀晚課分舵閱讀 5,750評論 0 1
  • 是否你是船兒, 而我是水。 是否每當(dāng)我看到你, 湖中的魚兒都會醉。 那微微的清波泛起, 一片水花就散落湖底。 魚兒...
    鳳凰與斑鳩閱讀 347評論 2 2

友情鏈接更多精彩內(nèi)容