Segue는 뒤로 막대 버튼에 데이터를 저장합니다. (Segue saves data on back bar button)


문제 설명

Segue는 뒤로 막대 버튼에 데이터를 저장합니다. (Segue saves data on back bar button)

TableViewCell 클릭 시 segue가 있고 다른 ViewController에 저장 버튼이 있습니다. 저장 버튼에서는 제대로 작동하지만 뒤로 바 버튼을 클릭하면 TableViewCell도 변경됩니다. 변경 사항을 어떻게 취소할 수 있습니까? NoteTableViewController와 NoteViewController가 있습니다

TableViewController 메소드

tableView cellRowAt 메소드

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ‑> UITableViewCell {
    let cellIdentifier = "NoteTableViewCell"

    let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! NoteTableViewCell
    let note = notes[indexPath.row]

    cell.noteLabel.text = note.note

    return cell
}

TableViewController가 segue 메소드를 준비합니다

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "ShowDetail" {
        let noteDetailViewController = segue.destination as! NoteViewController

        if let selectedNoteCell = sender as? NoteTableViewCell {
            let indexPath = tableView.indexPath(for: selectedNoteCell)!
            let selectedNote = notes[indexPath.row]
            noteDetailViewController.note = selectedNote
            noteDetailViewController.oldNote = someNote
        }
    }
}

이 메소드는 저장용입니다 데이터, NoteViewController의 saveButton에 연결

    @IBAction func unwindToNoteList(sender: UIStoryboardSegue) {
    if let sourceViewController = sender.source as? NoteViewController {
        let note = sourceViewController.note
        if note?.note != nil {
            if let selectedIndexPath = tableView.indexPathForSelectedRow {
                notes[selectedIndexPath.row] = note!
                tableView.reloadRows(at: [selectedIndexPath], with: .none)
            } else {
                let newIndexPath = NSIndexPath(row: notes.count, section: 0)
                notes.append(note!)
                tableView.insertRows(at: [newIndexPath as IndexPath], with: .top)
            }
            saveNotes()
        }
    }
}

NoteViewController 메소드

segue 준비

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if saveButton === sender as? UIBarButtonItem {
        if let noteText = noteTextView.text {
            note?.note = noteText
        }
    note?.toDate = remindDate
    note?.image = photoImageView.image
    } else {
        note = oldNote
    }
}

참조 솔루션

방법 1:

Problem solved, by implementation NSObject copy() method. And sending a copy to NoteViewController.

(by Ivan ZolotarovIvan Zolotarov)

참조 문서

  1. Segue saves data on back bar button (CC BY‑SA 2.5/3.0/4.0)

#uinavigationcontroller #uitableview #iphone #iOS






관련 질문

세로에서 가로로 회전할 때 UIBarButtonItem 크기를 변경하는 방법은 무엇입니까? (how to change the UIBarButtonItem size when rotate from the portrait to landscape?)

performSegueWithIdentifier는 식별자 오류가 있는 segue를 생성하지 않습니다. (performSegueWithIdentifier produce no segue with identifier error)

UIAlertController는 leftBarButtonItem을 아래로 이동합니다. (UIAlertController moves leftBarButtonItem down)

현재 모달 보기는 탐색 스택에서 탐색 모음을 숨깁니다. (present modal view hides the navigation bar in navigation stack)

테이블 뷰 셀을 선택할 때 뷰 컨트롤러를 푸시할 수 없습니다. (Can't push my view controller when I select a table view cell)

프로그래밍 방식으로 탐색 컨트롤러의 초기 viewController 설정(레이어 SDK) (Set initial viewController in Navigation controller programmatically (Layer SDK))

UIViewController 유형의 표현식으로 UINavigationController를 초기화하는 호환되지 않는 포인터 유형 (Incompatible pointer types initializing UINavigationController with an expression of type UIViewController)

탐색 컨트롤러 도구 모음 크기 및 위치 - iOS Swift (Navigation Controller Toolbar Size & Location - iOS Swift)

Segue는 뒤로 막대 버튼에 데이터를 저장합니다. (Segue saves data on back bar button)

UINavigationController 푸시 전환 중 낮은 프레임 속도 (Low frame rate during UINavigationController push transition)

뷰 컨트롤러에서 탐색 모음의 모양 재설정 (Reset the appearance of navigation bar in a view controller)

탐색 모음 제목 보기 내에서 분할된 제어 스위치를 처리하려고 합니다. (Trying to handle segmented control switch inside of navigation bar title view)







코멘트