在iOS開發(fā)中绪钥,一直存在這樣一個(gè)問題,在TableViewCell上添加Button后凿叠,點(diǎn)擊Button的時(shí)候,發(fā)現(xiàn)沒有高亮效果嚼吞,除非長(zhǎng)按下去才能看到普通的Button選中效果盒件。
原因解釋:
iOS 6 的 UITableViewCell 子視圖容器 (subviews) 是UITableViewCellContentView
iOS 7 后的 UITableViewCell 子視圖容器 (subviews) 是UITableViewCellScrollView,是在UITableViewCell 和 conteneView之間的控制部分舱禽,因?yàn)閕OS 7后添加了滑動(dòng)編輯等操作炒刁,所以UITableviewCellScrollView會(huì)對(duì)觸摸有相應(yīng)的處理,具有一個(gè)屬性 delaysContentTouches(默認(rèn)為YES)誊稚,會(huì)根據(jù)該屬性的設(shè)置決定是否去判斷翔始,用戶當(dāng)前的 touch 究竟是滑動(dòng)還是點(diǎn)擊,應(yīng)該是由于這部分的 delay 導(dǎo)致按鈕的點(diǎn)擊高亮效果被屏蔽了里伯,但是點(diǎn)擊事件還是存在的 城瞎。
經(jīng)過純代碼和storyboard (xib) 兩種方式重新編寫Cell上帶有Button的demo,驗(yàn)證這個(gè)問題確實(shí)都存在俏脊。
綜合各類資料全谤,得到并嘗試了下面的解決方案:
僅在 Cell 中去修改代碼,一層層向上尋找父View爷贫,直到UITableView(包括)认然,凡是可以響應(yīng) delaysContentTouches 的都要將該屬性設(shè)置為 NO补憾,代碼如下:
(void)cancelDelaysContentTouches{
id view = self.emptyStateView; //最外層的視圖容器
while (view) {
if ([view respondsToSelector:@selector(setDelaysContentTouches:)]) {
[view setDelaysContentTouches:NO];
}
if ([view isMemberOfClass:[UITableView class]]) {
break;
}
view = [view superview];
}
}
其他解決方案:
1. 網(wǎng)上推崇最多的方式,在每個(gè)調(diào)用該類型 Cell 的 TableView 中將 delaysContentTouches 設(shè)置為NO卷员,由于 UITableview 的 UITableViewWrapperView 也繼承自 UIScrollView盈匾,所以需要使用一個(gè)循環(huán)來完成對(duì)于UITableview 中繼承自 UIScrollView 的 View 中上述屬性都要置為NO的操作,示例代碼如下:
for (id obj in self.tableView.subviews) {
if ([obj respondsToSelector:@selector(setDelaysContentTouches:)]) {
[obj setDelaysContentTouches:NO];
}
} //**實(shí)測(cè)有效**毕骡,但是每個(gè)頁面用到TableView都要設(shè)置削饵,項(xiàng)目中涉及OC和Swift的多處調(diào)用,不方便未巫,換思路窿撬。
2. 寫一個(gè)UIButton的Category,將它的 touchBegan, touchCancel, touchEnded 方法重寫叙凡,手動(dòng)設(shè)置高亮效果劈伴。代碼在參考文獻(xiàn)中的 CSDN 博客中有提供,block中的延遲可以自己設(shè)置握爷。實(shí)測(cè)有效跛璧,但是使用分類的實(shí)現(xiàn)影響了所有的 Button 效果,當(dāng)前項(xiàng)目影響范圍不可控新啼,換思路追城。
3. 寫一個(gè)Button的子類,重寫分類中提到的方法燥撞,將Cell中的Button類型換掉座柱,實(shí)測(cè)未生效。
參考資料:
https://stackoverflow.com/questions/19256996/uibutton-not-showing-highlight-on-tap-in-ios7 (Stack Overflow)
http://www.reibang.com/p/6c0884c0933a -簡(jiǎn)書
https://zhidao.baidu.com/question/937679690539732732.html -百度知道
http://www.cnblogs.com/yu0806/p/4505795.html -轉(zhuǎn)載的博客
http://blog.csdn.net/QearlYu/article/details/53391910 -CSDN博客