[Swift] UItableView의 편집 모드를 제어하여 삭제만 허용, 정렬만 허용

11193 단어 UITableViewSwiftiOS
UITTableView에는 편집 모드가 있습니다.
나는 기본적인 사용 방법은 아래의 내용을 참조하여 이해할 수 있다고 생각한다.
UItableView 편집 모드를 사용하여 데이터 삭제 및 정렬
편집 가능한 Cell의 지정 사용UITableViewDataSource 방법은 다음과 같습니다.
// 1. 編集モードを許可するIndexPathの指定
func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool
// 2. ソートを許可するIndexPathの指定
func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool
1.true셀은 삭제할 수 있습니다,2.의 정렬이 유효한지 여부입니다.
2.true셀은 정렬 가능
즉,

표준은 정렬만 할 수 없습니다!!!


 
나는 사용 빈도가 많지 않다고 생각했지만, 나는 강제로 시험해 보았기 때문에 공유되었다.

편집 모드에서의 동작


우선tableView.editing = true시 서로 다른 설정의 행동을 살펴봅시다.

·canEdit->가짜,canMove>가짜



둘 다 때가 됐지, 물론 아무 일도 일어나지 않았지.

· 가짜,canEdit->진짜



앞에서 말한 바와 같이 삭제만 할 수 있다.

·canMove->가짜,canEdit->가짜



이 경우 canMove->true 라이센스가 없으므로 아무 일도 일어나지 않습니다.

・tableView:canEditRowAtIndexPath:canEdit->참



정렬을 하려면 두 가지 측면을 모두 canMove->true로 설정해야 하지만 그림처럼 삭제할 수도 있다.

편집 모드의 화면 구성


편집 모드에서 아래 그림처럼 축소trueUITableViewCell, 양쪽에 추가ContentView.

삭제 단추 숨기기


실제로 숨기려면 몇 가지 방법이 있을 수 있으니 가장 간단한 방법을 소개해 드리겠습니다.
어떻게 해야 할지는 표 보기를 확대하고 삭제 단추를 화면 밖으로 밀어내는 것이다.
이 정도야, 그렇게 생각하는 사람한테는 m(...)웃다
너비를 변경하는 방법은 UItableView의 왼쪽 여백UITableViewCellEditControl을 조정합니다.
다른 장소NSLayoutConstraint의 조정에 비해 조정frame 코드량이 줄어들고 조정하기 쉬운 경우도 많다NSLayoutConstraintUITableViewCell는 편집 모드에 들어갈 때 양쪽 끝이 모두 수축ContentView된다.
그래서 왼쪽 공백true을 줄이면 잘 숨겨진다.
텍스트만 보면 이해하기 어려우므로 주요 부분의 코드를 게재해야 한다.
// 編集タイプ
enum EditType {
  case None, All, Delete, Sort
}

var editType = EditType.None {
  willSet {
    self.tableView.editing = true
    self.leftConstraint.constant = 0
    if newValue == .None { self.tableView.editing = false }
    else if newValue == .Sort { self.leftConstraint.constant = -38 }
    self.tableView.reloadData()
  }
}

/**
 *  UITableView DataSource --------
 */
func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
  switch self.editType {
    case .None : return false
    default : return true
  }
}

func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
  switch self.editType {
    case .None, .Delete : return false
    default : return true
  }
}
38px의 값을 변경하여 편집 모드를 전환할 수 있습니다.

실행 결과


이상 코드는 NSLayoutConstraint일 때의 실행 결과입니다.

네, 잘 숨었어요.

주의점


삭제(정렬)하기 싫은 셀이 있다면 공을 들여야 한다.
TableView 위 두 개의 예를 고정시키려는 경우를 나타냅니다.
func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
  switch self.editType {
    case .None : return false
    case .Sort : return true  // ここ重要
    default :
      if indexPath.row < 2 { return false }
      else { return true }
  }
}

func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
  switch self.editType {
    case .None, .Delete : return false
    default :
      if indexPath.row < 2 { return false }
      else { return true }
  }
언뜻 보기에는 일반적인 처리이지만 평론 부분처럼 editType할 때는 답장self.editType = .Sort해야 한다.
이번 상황은 서열만 가능한 상황에서 가지고 놀기 때문에.Sort 이 처리를 하지 않으면 고정된 셀이 보이지 않는다.

최후


이번에는 정렬만 가능한 TableView를 설치해 봤습니다.
헤더, 포터가 있으면 프레임을 조정해야 하지만 간단하게 실현할 수 있다.
이번처럼 다양한 상황에 대처할 수 있는 엔지니어가 되고 싶어요.
그럼 iOS 잘 살자!!!!

좋은 웹페이지 즐겨찾기