在UITableViewCell上的Button的Highlight
有時候會在UITableViewCell上放Button,但其實之前就有發現一個小問題,雖然不影響功能,但是這問題還是一直記著,剛好前幾天有剛好有又要在UITableViewCell上放Button,剛好就來找找看解決方法。
先來看看到底是什麼惱人的小問題
可以看到在tableVIewCell內放了一個Button,按了之後會跳到下一個頁面
總共操作三次,第一次和第二次是正常user使用者會點擊的速度,第三次是手指放在Button上一段時間後再放開,可以看到第一次和第二次的Button是沒有顯示highlight狀態就跳到下一個頁面了,第三次的在Button上停留一小段時間才有highlight

後來查了一下發現了為什麼會造成這樣的現象,就是UITableView是繼承自UIScrollView,所以手指touch到tableViewCell上的Button時其實會先碰到srollView然後判斷是否是要滑動scrollView,如果大約0.5秒後沒有動作就會判斷不是要滑動,才會觸發到tableVIewCell上的Button,這時候才會highlight
那要怎麼去解決呢?其實真的超簡單,簡單的解法竟然只要一行就可以了,
在viewDidLoad()裡放
tableView.delaysContentTouches = false
效果如下,按下去Button會馬上有highlight然後跳到下個頁面,終於解決這個惱人的小問題

備註:
有看到一些人有提到只用tableView.delaysContentTouches = false,還是沒辦法馬上顯示hightlight,所以會再加上另一段
tableView.delaysContentTouches = falsefor subView in tableView.subviews {if subView.isKind(of: UIScrollView.self) {let scroView = subView as! UIScrollViewscroView.delaysContentTouches = false}
雖然我是只需要tableView.delaysContentTouches = false這一行就可以了,但還是放上這段