2014年8月29日 星期五

取消UITableView選擇後會highlight的動畫

我總共找到幾種方法,這之間有一些差異

第一種 放在tableView:cellForRowAtIndexPath:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
但仍然會觸發tableView:didSelectRowAtIndexPath:,只是不會有highlight的動畫。

可以用這個方法避免觸發到不希望有highlight效果的row
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // A case was selected, so push into the CaseDetailViewController
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if (![cell selectionStyle] == UITableViewCellSelectionStyleNone) {
        // Handle tap code here
    }
}


第二種 放在viewDidLoad裡
[self.tableView setAllowsSelection:NO];
一次取消整個tableView的highlight功能,不會觸動tableView:didSelectRowAtIndexPath:。
另外這是我找到的評論:Instead of userInteraction, use tableView.allowsSelection. That stops the cell's interaction methods but doesn't block the regular UIView responder stuff.


第三種 放在tableView:cellForRowAtIndexPath
cell.userInteractionEnabled = NO;
指定特定的row停止所有與使用者互動的功能,包括向右滑動刪除的功能。


第四種
放在viewDidLoad裡
[self.tableView setUserInteractionEnabled:NO];
一次設定所有的tableView的userInteraction功能都取消。但這個方法會使得tableView連scroll的動作都沒辦法做,要注意!


第五種
直接在Storyboard上設定,點選tableView的Selection選項,選擇No Selection

用這個方法的話,不會觸動tableView:didSelectRowAtIndexPath:。

資料來源:http://stackoverflow.com/questions/190908/how-can-i-disable-the-uitableview-selection-highlighting