선택한 UITableView 셀을 선택 취소하는 방법은 무엇입니까?
특정 셀을 미리 선택 해야하는 프로젝트를 진행 중입니다.
을 사용하여 셀을 미리 선택할 수 -willDisplayCell
있지만 사용자가 다른 셀을 클릭하면 선택을 취소 할 수 없습니다.
- (void)tableView:(UITableView*)tableView
willDisplayCell:(UITableViewCell*)cell
forRowAtIndexPath:(NSIndexPath*)indexPath
{
AppDelegate_iPad *appDelegte =
(AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
if ([appDelegte.indexPathDelegate row] == [indexPath row])
{
[cell setSelected:YES];
}
}
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
AppDelegate_iPad *appDelegte =
(AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
NSIndexPath *indexpath1 = appDelegte.indexPathDelegate;
appDelegte.indexPathDelegate = indexPath;
[materialTable deselectRowAtIndexPath:indexpath1 animated:NO];
}
도울 수 있니?
이 코드를 사용하십시오
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//Change the selected background view of the cell.
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
스위프트 3.0 :
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//Change the selected background view of the cell.
tableView.deselectRow(at: indexPath, animated: true)
}
에서 다음과 같은 방법을 사용하여 테이블 뷰 대리인의 didSelectRowAtIndexpath
(또는 어디서나)
[myTable deselectRowAtIndexPath:[myTable indexPathForSelectedRow] animated:YES];
이 시도:
for (NSIndexPath *indexPath in tableView.indexPathsForSelectedRows) {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
}
위임 방법이 올바른지 여부를 확인하십시오. 예를 들어;
-(void) tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
...에 대한
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
이를 위해 Swift에서 확장하는 것이 유용 할 수 있습니다.
스위프트 4 :
스위프트 확장 (예 : UITableViewExtension.swift 파일) :
import UIKit
extension UITableView {
func deselectSelectedRow(animated: Bool)
{
if let indexPathForSelectedRow = self.indexPathForSelectedRow
{
self.deselectRow(at: indexPathForSelectedRow, animated: animated)
}
}
}
사용 예 :
override func viewWillAppear(_ animated: Bool)
{
super.viewWillAppear(animated)
self.tableView.deselectSelectedRow(animated: true)
}
스위프트 4 :
tableView.deselectRow(at: indexPath, animated: true)
셀을 선택된 것으로 설정하는 것 외에도, 셀이 선택되었음을 tableView에 알려야합니다. 에 호출을 추가 -tableView:selectRowAtIndexPath:animated:scrollPosition:
하여에 willDisplayCell:
방법 당신은 정상으로 선택을 취소 할 수 있습니다.
- (void)tableView:(UITableView*)tableView
willDisplayCell:(UITableViewCell*)cell
forRowAtIndexPath:(NSIndexPath*)indexPath
{
AppDelegate_iPad *appDelegte = (AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
if ([appDelegte.indexPathDelegate row] == [indexPath row])
{
// SELECT CELL
[cell setSelected:YES];
// TELL TABLEVIEW THAT ROW IS SELECTED
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
}
}
이상한 스크롤 동작을 피하려면 UITableViewScrollPositionNone을 사용해야합니다.
이것은 스위프트 4에 대한 솔루션입니다
in tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
그냥 추가
tableView.deselectRow(at: indexPath, animated: true)
그것은 매력처럼 작동합니다
예:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
//some code
}
이것은 작동해야합니다 :
[tableView deselectRowAtIndexPath:indexpath1 animated:NO];
materialTable과 tableView가 동일한 객체를 가리키는 지 확인하십시오.
인터페이스 빌더에서 재질이 tableView에 연결되어 있습니까?
saikirans 솔루션을 기반으로, 나는 이것을 작성하여 나를 도왔다. .m 파일에서 :
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if(selectedRowIndex && indexPath.row == selectedRowIndex.row) {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
selectedRowIndex = nil;
}
else { self.selectedRowIndex = [indexPath retain]; }
[tableView beginUpdates];
[tableView endUpdates];
}
그리고 헤더 파일에서 :
@property (retain, nonatomic) NSIndexPath* selectedRowIndex;
나는 경험이 많지 않으므로 메모리 누수 등을 다시 확인하십시오.
첫 번째 클릭으로 테이블 셀을 선택하고 두 번째 클릭으로 선택을 취소하려면이 코드를 사용해야합니다.
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.selectedIndexPath &&
[indexPath compare:self.selectedIndexPath] == NSOrderedSame) {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
self.selectedIndexPath = nil;
}
else {
self.selectedIndexPath = indexPath;
}
}
스위프트 4 :
func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
let cell = tableView.cellForRow(at: indexPath)
if cell?.isSelected == true { // check if cell has been previously selected
tableView.deselectRow(at: indexPath, animated: true)
return nil
} else {
return indexPath
}
}
스위프트 2.0 :
tableView.deselectRowAtIndexPath(indexPath, animated: true)
이 시도
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
NSIndexPath * index = [self.menuTableView indexPathForSelectedRow];
[self.menuTableView deselectRowAtIndexPath:index animated:NO];
이 코드를 코드에 따라 배치하면 셀 선택이 해제됩니다.
당신이 이것을 시도 할 수 있습니까?
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
AppDelegate_iPad *appDelegte =
(AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
NSIndexPath *indexpath1 = appDelegte.indexPathDelegate;
appDelegte.indexPathDelegate = indexPath;
UITableViewCell *prevSelectedCell = [tableView cellForRowAtIndexPath: indexpath1];
if([prevSelectedCell isSelected]){
[prevSelectedCell setSelected:NO];
}
}
그것은 나를 위해 일했다.
스위프트 3.0 :
Following the protocol conformance section of the ray wenderlich swift style guide, to keep related methods grouped together, put this extension below your view controller class like that:
// your view controller
class MyViewcontroller: UIViewController {
// class stuff here
}
// MARK: - UITableViewDelegate
extension MyViewcontroller: UITableViewDelegate {
// use the UITableViewDelegate method tableView(_:didSelectRowAt:)
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// your code when user select row at indexPath
// at the end use deselectRow
tableView.deselectRow(at: indexPath, animated: true)
}
}
Swift
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// your code
// your code
// and use deselect row to end line of this function
self.tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
}
Swift 3
I've run into this as well - when you navigate or unwind back to the table view it usually doesn't deselect the previously selected row for you. I put this code in the table view controller & it works well:
override func viewDidAppear(_ animated: Bool) {
if let lastSelectedRow = tableView.indexPathForSelectedRow {
tableView.deselectRow(at: lastSelectedRow, animated: true)
}
}
Swift 3/4
In ViewController:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
}
In Custom Cell:
override func awakeFromNib() {
super.awakeFromNib()
selectionStyle = .none
}
swift 3.0
tableView.deselectRow(at: indexPath, animated: true)
To have deselect (DidDeselectRowAt) fire when clicked the first time because of preloaded data; you need inform the tableView that the row is already selected to begin with, so that an initial click then deselects the row:
//Swift 3:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView[indexPath.row] == "data value"
tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none)
}
}
What I've found is that on top of setting the cell as selected, you have to let the table view know to select the row at the given index path.
// Swift 3+
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if appDelegate.indexPathDelegate.row == indexPath.row {
self.tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none)
cell.setSelected(true, animated: true)
}
}
참고URL : https://stackoverflow.com/questions/3968037/how-to-deselect-a-selected-uitableview-cell
'Programming' 카테고리의 다른 글
HTML에서 "모두 선택"확인란을 구현하는 방법은 무엇입니까? (0) | 2020.05.06 |
---|---|
Rails에서 현재 경로를 어떻게 알 수 있습니까? (0) | 2020.05.06 |
random.choice의 가중치 버전 (0) | 2020.05.06 |
외부 활동시 Android 활동 대화 상자가 닫히지 않도록 방지 (0) | 2020.05.06 |
Android Studio에 libs 디렉토리가 없습니다 (0) | 2020.05.06 |