답변:
표 셀의 selectionStyle
속성을로 설정합니다 UITableViewCellSelectionStyleNone
. 이렇게하면 강조 표시되지 않으며에서 해당 속성을 확인할 수도 있습니다 tableView:didSelectRowAtIndexPath:
.
완전히의 선택을 방지하기 위해 UITableViewCell
, 당신은이 UITableViewDelegate
구현 tableView:willSelectRowAtIndexPath:
. 해당 방법 nil
에서 행을 선택하지 않으려면 반환 할 수 있습니다 .
- (NSIndexPath *)tableView:(UITableView *)tv willSelectRowAtIndexPath:(NSIndexPath *)path
{
// Determine if row is selectable based on the NSIndexPath.
if (rowIsSelectable) {
return path;
}
return nil;
}
이렇게하면 행이 선택되거나 tableView:didSelectRowAtIndexPath:
호출되지 않습니다. 그러나 이것이 행이 강조 표시되는 것을 방지 하지는 않습니다 .
터치시 행이 시각적으로 강조 표시되지 않도록하려면 셀이 selectionStyle
로 설정되어 있는지 확인 UITableViewCellSelectionStyleNone
하거나 다음과 같이 UITableViewDelegate
구현할 수 있습니다 tableView:shouldHighlightRowAtIndexPath:
.
- (BOOL)tableView:(UITableView *)tv shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
// Determine if row is selectable based on the NSIndexPath.
return rowIsSelectable;
}
didSelectRowAtIndexPath
되기 때문에 아무것도하지 않도록 선택할 수 있습니다 willSelectRowAtIndexPath
.
이것을 사용하십시오 :
cell.selectionStyle = UITableViewCellSelectionStyleNone;
didSelectRowAtIndexPath
여전히 호출됩니다.
iOS 6 이상 전용.
tableView:shouldHighlightRowAtIndexPath:
대리자 에서 메서드 를 구현할 수 있습니다
. 자세한 내용은 http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html
이 문제도 이미 언급 한 모든 것을 시도했습니다. 표 셀을 선택할 때 "파란색 깜박임"을 없앤 마지막 트릭은 다음 줄을 추가하는 것입니다.
self.myTableView.allowsSelection = NO;
이 한 줄인지 모든 것이 합쳐 졌는지 확실하지 않지만 총체적인 결과로 더 이상 파란색 선택이나 파란색 깜박임이 표시되지 않습니다. 행복!
Apple은 didSelectRowAtIndexPath에서 가장 먼저해야 할 일은 행을 선택 취소하는 것이라고 말합니다.
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];
그런 다음 AccessoryType을 확인 표시로 변경하거나 없음 등으로 변경할 수 있습니다. 따라서 didSelectRowAtIndexPath를 입력 할 때 행을 선택 취소 할 수 있으며 선택되지 않은 경우 해당 행을 확인하지 마십시오.
또 다른 방법은에 몇 가지 범주 메서드를 추가하는 것 UITableViewCell
입니다. 나는 내 테이블을 만드는 방식 때문에 Sebastians (또한 좋은) 대답보다 이것을 좋아합니다. 다른 사람에게 도움이 될 것이라고 생각했습니다.
- (void)setSelectable:(BOOL)enabled {
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
[self setUserInteractionEnabled:enabled];
}
- (BOOL)isSelectable {
BOOL disabled = [self selectionStyle]==UITableViewCellSelectionStyleNone &&
[self isUserInteractionEnabled];
return ! disabled;
}
Swift 4 :
UITableViewDelegate를 사용하여 선택 및 강조 표시를 방지 할 수 있습니다. shouldHighlightRowAt
이 답변은 사용자 지정 셀이 CustomTableViewCell로
생성되고 해당 사용자 지정 셀 내부에 isSelectable 이라는 부울을 생성했다고 가정합니다 .
func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
if cell.isSelectable == false {
return false
} else {
return true
}
}
이것은 Sebastian Celis의 objc 답변의 Swift 버전입니다.
tableView : didSelectRowAtIndexPath : 대신 tableView : willDisplayCell : forRowAtIndexPath :를 사용하여 셀을 처음 터치 할 때 나타나는 플래시를 제거합니다.
- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
특정 행을 선택 해제하려면 두 가지 UITableView 대리자 메서드를 변경해야합니다.
아래 방법에서
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
셀 할당 후 아래 코드를 작성하십시오.
if(indexPath.row == someCellNumber) cell.selectionStyle =UITableViewCellSelectionStyleNone;
위의 코드는 어떻게 든 사용자가 선택하려고 할 때 셀을 강조 표시하지 않습니다.
아래이 대리자 메서드에서
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if(indexPath.row == someCellNumber) return;
//for other cells write the code below...
}
쓰지 않으면 if(indexPath.row == someCellNumber) return;
행이 계속 선택되고 앱이 충돌 할 가능성이 있습니다.
tableView:shouldHighlightRowAtIndexPath:
로 아래 Ayush에 의해 지적