UITableView 선택을 비활성화하려면 어떻게 해야 합니까?
에서 누때를행에서 때.UITableView
행이 강조 표시되고 선택됩니다.행을 눌러도 아무 일도 일어나지 않도록 설정할 수 있습니까?
이 해야 할 은 에 선택 입니다.UITableViewCell
다음 중 하나를 사용하는 인스턴스:
목표-C:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
또는
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
스위프트 2:
cell.selectionStyle = UITableViewCellSelectionStyle.None
Swift 3 및 4.x:
cell.selectionStyle = .none
또한, 구현하지 않는지 확인하십시오.-tableView:didSelectRowAtIndexPath:
테이블 보기에서 작업을 구현할 경우 수행하지 않을 셀을 위임하거나 명시적으로 제외합니다.
저에게는 다음과 같은 것들이 잘 작동했습니다.
tableView.allowsSelection = false
이것은 의미합니다.didSelectRowAt#
전혀 효과가 없을 것입니다.즉, 테이블의 한 줄을 만지는 것은 전혀 도움이 되지 않습니다. (따라서 분명히, 선택된 애니메이션은 절대 없을 것입니다.)
에 (셀에있경우는, 같은경우과다음)▁(▁(,셀가 있는 경우 하십시오.UIButton
또는 다른 제어 장치는 물론 해당 제어 장치는 여전히 작동합니다.셀에 모든 에게 "이 없습니다.didSelectRowAt#
.)
은 다음과 같습니다이것은 작동하지 않습니다.UITableView
편집 모드에 있습니다.편집 모드에서 셀 선택을 제한하려면 다음 코드를 사용합니다.
tableView.allowsSelectionDuringEditing = false
제가 최근에 이 글을 읽고 도움이 되었기 때문에 (후대를 위해) 모든 답을 통합하기 위해 또 다른 답을 올리고 싶었습니다.
따라서 원하는 논리 및/또는 결과에 따라 실제로 5가지 다른 답이 있습니다.
1.셀의 다른 상호 작용을 변경하지 않고 파란색 강조 표시를 비활성화하려면:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
UIButton(또는 다른 컨트롤)이 UITableViewCell에 호스트되어 있을 때 사용하며 사용자가 컨트롤과 상호 작용할 수 있지만 셀 자체와는 상호 작용할 수 없습니다.
참고: 위에서 Tony Million이 언급한 것처럼, 이것이 예방하지는 않습니다.tableView:didSelectRowAtIndexPath:
이 문제는 단순한 "만약" 문장을 통해 해결할 수 있습니다. 대부분의 경우 섹션을 테스트하고 특정 섹션에 대한 작업을 피합니다.
제가 생각한 또 다른 방법은 이런 세포를 두드리는 것을 테스트하는 것입니다.
- (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
}
}
2의 각 할 수 다음과 같은 할 수 있습니다.2.표의 각 에 적용할 수 있습니다.
[tableView setAllowsSelection:NO];
테스트에서, 제테트에서여, 은내제허다니용합어를부 안에서 합니다.UITableViewCell
상호작용을 합니다.
을 " 전용"으로 과 같이. 3. 셀을 "읽기 전용"으로 만들려면 다음과 같이 하면 됩니다.
[cell setUserInteractionEnabled:NO];
테이블을 " 전용으로 . 전체 테이블을 "읽기 전용"으로 만들려면
[tableView setUserInteractionEnabled:NO];
5.셀을 강조 표시할지 여부를 즉시 결정하려면(이 답변에 따라 선택 항목이 암시적으로 포함됨) 다음을 구현할 수 있습니다.UITableViewDelegate
프로토콜 방법:
- (BOOL)tableView:(UITableView *)tableView
shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
이를 구현한 경험을 바탕으로 올바른 답이 무엇이라고 생각해 보면 다음과 같습니다.
일부 셀만 선택하지 않으려면 다음을 사용합니다.
cell.userInteractionEnabled = NO;
선택을 금지할 뿐만 아니라 tableView:didSelectRowAtIndexPath: 설정된 셀에 대해 호출되는 것도 중지합니다. (이 답변에 대한 크레딧은 TonyMillion에게 전달됩니다, 감사합니다!)
셀에 클릭해야 하는 단추가 있는 경우 대신 다음 작업을 수행해야 합니다.
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
그리고 당신은 또한 셀을 클릭하는 것을 무시해야 합니다.- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
.
전체 테이블에 대한 선택을 비활성화하려면 다음을 사용합니다.
tableView.allowsSelection = NO;
(Paulo De Barros에게 감사합니다!)
6, iOS 6.0 버전UITableViewDelegate
가지다tableView:shouldHighlightRowAtIndexPath:
(iOS 설명서를 참조하십시오.)
이 스타일을 행을 표시할 수 수 하여 셀의 할 수 있습니다.userInteractionEnabled = NO
또는 여기에 문서화된 다른 기술.
에서 행 .NoSelection
selection
은 UITableViewProperties (UITableViewProperties)입니다.
SWIFT 3을 위한 고정 솔루션
cell.selectionStyle = .none
편집: 최신 Swift의 경우 다음으로 변경됩니다.
cell.selectionStyle = .none
자세한 내용은 다음을 참조하십시오. https://developer.apple.com/documentation/uikit/uitableviewcell/selectionstyle
Swift에 대한 답변이 필요한 경우:
cell.selectionStyle = .None
의 신의에서.UITableViewCell
의 속성 검사기 설정 값에 있는 의 XIBSelection
None
.
선택한 상태를 유지하지 않고 선택한 상태만 깜박이도록 하려면 다음을 호출할 수 있습니다.
didSelectRowAtIndexPath
이하의
[tableView deselectRowAtIndexPath:indexPath animated:YES];
그러면 선택한 상태가 깜박이고 되돌아갑니다.
UITableViewDelegate
은 당신이 할 수 은 방을사 있로프입니다.willSelectRowAtIndexPath
그리고.return nil
행을 선택하지 않으려면 이 옵션을 선택합니다.
로 동한방로수사있다니습용할으식을 할 수 .willDeselectRowAtIndexPath
및 방법return nil
행 선택을 취소하지 않으려면 이 옵션을 선택합니다.
이것이 제가 사용하는 것입니다.cellForRowAtIndexPath
이 코드를 작성합니다.:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
1 - 다음 중 하나를 사용하여 인스턴스에서 선택 스타일을 설정하기만 하면 됩니다.
목표-C:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
또는
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
스위프트 2:
cell.selectionStyle = UITableViewCellSelectionStyle.None
스위프트 3:
cell.selectionStyle = .none
2 - 테이블 tableView:didSelectRowAtIndexPath:
보기에서 구현 안 함delegate
또는 수행하지 않을 셀을 명시적으로 제외합니다.
3 - 더 나아가,스토리보드에서도 할 수 있습니다.표 보기 셀을 클릭하고 표 보기 셀 아래의 특성 검사기에서 선택 옆의 드롭다운을 없음으로 변경합니다.
4 - (iOS) Xcode 9, Swift 4.0에서 아래 코드를 사용하여 테이블 셀 강조 표시를 비활성화할 수 있습니다.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "OpenTbCell") as! OpenTbCell
cell.selectionStyle = .none
return cell
}
목표-C:
아래 스니펫에서는 강조 표시를 사용하지 않지만 에 대한 호출도 사용하지 않습니다.
didSelectRowAtIndexPath
만약 이 따서구지않경을우하를 실행하지 ,didSelectRowAtIndexPath
그런 다음 아래 방법을 사용합니다.테이블을 작성할 때 추가해야 합니다.은 버튼 및 이은버과에서 합니다.UITextField
하지만 감방 안에서.self.tableView.allowsSelection = NO;
아래 스니펫은 강조 표시를 비활성화하고 호출은 비활성화하지 않습니다.
didSelectRowAtIndexPath
을 "으로 합니다.cellForRowAtIndexPath
cell.selectionStyle = UITableViewCellSelectionStyleNone;
아래 스니펫은 셀의 모든 것을 비활성화합니다.이렇게 하면 에 대한 상호 작용이 비활성화됩니다.
buttons
,textfields
:self.tableView.userInteractionEnabled = false;
스위프트:
다음은 다음과 같습니다.Swift
위의 한 것Objective-C
솔루션:
첫 번째 솔루션 교체
self.tableView.allowsSelection = false
두 번째 솔루션 교체
cell?.selectionStyle = UITableViewCellSelectionStyle.None
제3의 솔루션 교체
self.tableView.userInteractionEnabled = false
스위프트 3, 4, 5
모범 사례: 코드 작성UITableViewCell
를 들어,, 당은신이 있습니다.UITableViewCell
는라이로라는 MyCell
awakeFromNib
냥그쓰라고 요.self.selectionStyle = .none
전체 예:
class MyCell: UITableViewCell {
override func awakeFromNib() {
super.awakeFromNib()
self.selectionStyle = .none
}
}
입력 시도:
cell.selected = NO;
필요할 때 행 선택을 취소합니다.
스위프트3에서...
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let r = indexPath.row
print("clicked .. \(r)")
tableView.cellForRow(at: indexPath)?.setSelected(false, animated: true)
}
저는 이것과 꽤 많이 싸웠습니다, 제 통제력을 가지고 있습니다.UITableViewCell
의 했습니다.userInteractionEnabled
의 셀 가 있는 스위치가 .설정을 위한 3개의 셀 정적 테이블이 있습니다. 날짜가 있는 2개, 켜기/끄기 스위치가 있는 1개.iib▁▁in▁'▁playing▁▁bottom▁theboardnon▁but▁managed스▁to▁make▁whenve▁it▁disappear▁you▁from▁selectionable한▁the▁ones▁tap,▁IBI는 아래쪽을 선택할 수 없도록 만들었지만, 탭하면 맨 위 행 중 하나에서 선택한 항목이 사라집니다.다음은 내 설정 UITableView의 WIP 이미지입니다.
세 번째 행을 누르면 아무 일도 일어나지 않고 선택 항목은 두 번째 행에 유지됩니다.이 기능은 사실상 Apple 캘린더 앱의 이벤트 시간 추가 선택 화면의 복사본입니다.
코드는 놀라울 정도로 호환되며 IOS2 =/:
- (NSIndexPath *)tableView: (UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 2) {
return nil;
}
return indexPath;
}
이 기능은 선택 스타일을 없음으로 설정하는 것과 함께 작동하므로 터치다운 이벤트 시 셀이 깜박이지 않습니다.
다음과 같은 코드를 작성할 수 있습니다.
cell.selectionStyle = UITableViewCellSelectionStyleNone;
하지만 우리가 라인 위에 커스텀 셀 xib가 있을 때 그 시간에 경고합니다.
사용자 지정 셀 xib
인터페이스 작성기에서 선택 스타일을 설정해야 합니다.
이 코드를 cellForRowAt에 넣으면 됩니다.인덱스 경로
셀의 선택 속성을 비활성화하려면 다음을 수행합니다.(셀을 탭하는 동안).
cell.selectionStyle = UITableViewCellSelectionStyle.None
UITableViewDataSource Protocol에서 내부 메서드cellForRowAt
추가: 메시지:
let cell = tableView.dequeueReusableCell(withIdentifier: "YOUR_CELL_IDENTIFIER", for: indexPath)
cell.selectionStyle = .none
return cell
OR
Storyboard > Select Cell > Identity Inspector > Selection으로 이동하여 드롭다운에서 선택할 수 있습니다.
저는 이것을 사용하고 있는데, 이것은 저에게 효과가 있습니다.
cell?.selectionStyle = UITableViewCellSelectionStyle.None
이것을 먹어보세요.
cell.selectionStyle = UITableViewCellSelectionStyleNone;
그리고.
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
인터페이스 작성기를 사용하여 선택 스타일을 설정할 수도 있습니다.
스토리보드에서 TableViewCell 강조 표시를 직접 비활성화합니다.
이 방법은 선택 중 행에 강조 표시가 표시되지 않도록 하는 가장 좋고 쉬운 방법입니다.
cell.selectionStyle = UITableViewCellSelectionStyleNone;
또한 행이 선택되었음을 간단히 보여준 다음 해제하는 것이 유용할 수도 있습니다.그러면 사용자가 선택하려는 항목을 확인하는 메시지가 표시됩니다.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
...
}
UI 테이블 보기 셀의 강조 표시를 비활성화하려면 다음과 같이 하십시오.
cell.selectionStyle = UITableViewCellSelectionStyleNone;
그리고 사용자가 셀과 상호작용하는 것을 허용해서는 안 됩니다.
cell.userInteractionEnabled = NO;
하여 Clear와 .UITableViewCellSelectionStyleNone
하기 싫거나 수 없는 경우UITableViewCellSelectionStyleNone
.
다음과 같은 코드를 사용합니다.
UIView *backgroundColorView = [[UIView alloc] init];
backgroundColorView.backgroundColor = [UIColor clearColor];
backgroundColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView: backgroundColorView];
각 셀에 색상이 지정된 보기를 추가하면 성능이 저하될 수 있습니다.
cell.selectionStyle = UITableViewCellSelectionStyleNone;
스토리보드에서도 할 수 있습니다.표 보기 셀을 클릭하고 표 보기 셀 아래의 특성 검사기에서 선택 옆의 드롭다운을 없음으로 변경합니다.
다음을 사용할 수 있습니다.
cell.selectionStyle = UITableViewCellSelectionStyleNone;
셀에서 UITableView의 인덱스 경로 메소드에 대한 행을 표시합니다.
또한 다음을 사용할 수 있습니다.
[tableView deselectRowAtIndexPath:indexPath animated:NO];
테이블 보기에서 인덱스 경로 메서드를 선택했습니다.
UITableView에서 모든 UITableViewCell에 대한 선택을 비활성화합니다.
tableView.allowsSelection = false
특정 UITableViewCell에 대한 선택을 해제합니다.
cell.selectionStyle = UITableViewCell.SelectionStyle.none
언급URL : https://stackoverflow.com/questions/190908/how-can-i-disable-the-uitableview-selection
'bestsource' 카테고리의 다른 글
Python 3.x 정수의 경우 비트 시프트보다 2배 더 빠릅니까? (0) | 2023.06.03 |
---|---|
Android에서 EditText의 텍스트 길이를 제한하는 가장 좋은 방법은 무엇입니까? (0) | 2023.06.03 |
루비에서 -> 연산자를 뭐라고 부르나요? (0) | 2023.06.03 |
Azure에서 이메일 보내기 (0) | 2023.05.29 |
VB.NET: ComboBox에서 사용자 입력을 방지하는 방법 (0) | 2023.05.29 |