Salah satu opsi akan menerapkan tombol kembali kustom Anda sendiri. Anda perlu menambahkan kode berikut ke metode viewDidLoad Anda:
- (void) viewDidLoad {
[super viewDidLoad];
self.navigationItem.hidesBackButton = YES;
UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(back:)];
self.navigationItem.leftBarButtonItem = newBackButton;
}
- (void) back:(UIBarButtonItem *)sender {
// Perform your custom actions
// ...
// Go back to the previous ViewController
[self.navigationController popViewControllerAnimated:YES];
}
MEMPERBARUI:
Ini adalah versi untuk Swift:
override func viewDidLoad {
super.viewDidLoad()
self.navigationItem.hidesBackButton = true
let newBackButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Bordered, target: self, action: "back:")
self.navigationItem.leftBarButtonItem = newBackButton
}
func back(sender: UIBarButtonItem) {
// Perform your custom actions
// ...
// Go back to the previous ViewController
self.navigationController?.popViewControllerAnimated(true)
}
PEMBARUAN 2:
Ini adalah versi untuk Swift 3:
override func viewDidLoad {
super.viewDidLoad()
self.navigationItem.hidesBackButton = true
let newBackButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.plain, target: self, action: #selector(YourViewController.back(sender:)))
self.navigationItem.leftBarButtonItem = newBackButton
}
func back(sender: UIBarButtonItem) {
// Perform your custom actions
// ...
// Go back to the previous ViewController
_ = navigationController?.popViewController(animated: true)
}
Mengganti tombol ke kustom seperti yang disarankan pada jawaban lain mungkin bukan ide bagus karena Anda akan kehilangan perilaku dan gaya default.
Satu opsi lain yang Anda miliki adalah menerapkan metode viewWillDisappear pada View Controller dan memeriksa properti bernama isMovingFromParentViewController . Jika properti itu benar, artinya View Controller menghilang karena sedang dihapus (muncul).
Seharusnya terlihat seperti:
Dalam cepat 4.2
sumber
override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) if isMovingFromParentViewController { // Your code... } }
viewWillDisappear(animated:)
akan terpicu jika Anda mendapat panggilan telepon. Ini mungkin bukan yang Anda inginkan. Mungkin lebih baik untuk digunakanwillMove(toParentViewController:)
sumber
parent == nil
saatnya kita kembali ke tempatparent
kejadianSaya dapat mencapai ini dengan yang berikut:
Cepat 3
Cepat 4
Tidak perlu tombol kembali kustom.
sumber
Saya membuat kelas (cepat) ini untuk membuat tombol kembali persis seperti yang biasa, termasuk panah kembali. Itu dapat membuat tombol dengan teks biasa atau dengan gambar.
Pemakaian
CustomBackButtonClass
(kode untuk menggambar panah belakang yang dibuat dengan plugin Sketch & Paintcode)
SWIFT 3.0
sumber
Jika Anda ingin memiliki tombol kembali dengan panah belakang Anda dapat menggunakan gambar dan kode di bawah ini
backArrow.png [email protected] [email protected]
sumber
Jika Anda menggunakan
navigationController
kemudian tambahkanUINavigationControllerDelegate
protokol ke kelas dan tambahkan metode delegasi sebagai berikut:Metode ini dipanggil setiap kali pengendali navigasi akan meluncur ke layar baru. Jika tombol kembali ditekan, controller tampilan baru itu
ViewController
sendiri.sumber
Di Swift 5 dan Xcode 10.2
Tolong jangan tambahkan item tombol bilah kustom, gunakan perilaku default ini.
Tidak perlu viewWillDisappear , tidak perlu BarButtonItem kustom dll ...
Lebih baik mendeteksi ketika VC dihapus dari orang tuanya.
Gunakan salah satu dari dua fungsi ini
Jika Anda ingin menghentikan perilaku default tombol kembali kemudian tambahkan BarButtonItem kustom.
sumber
TIDAK
override func willMove(toParentViewController parent: UIViewController?) { }
Ini akan dipanggil bahkan jika Anda segueing ke pengontrol tampilan di mana Anda menimpa metode ini. Di mana memeriksa apakah "
parent
"nil
bukan bukan cara yang tepat untuk memastikan kembali ke yang benarUIViewController
. Untuk menentukan dengan tepat apakahUINavigationController
navigasi yang benar kembali keUIViewController
yang disajikan saat ini, Anda harus menyesuaikan diri denganUINavigationControllerDelegate
protokol.IYA
catatan:
MyViewController
hanya nama apa punUIViewController
yang ingin Anda deteksi untuk kembali.1) Di bagian atas file Anda tambahkan
UINavigationControllerDelegate
.2) Tambahkan properti ke kelas Anda yang akan melacak dari
UIViewController
yang Anda segueing dari.3) di
MyViewController
'sviewDidLoad
metode menetapkanself
sebagai delegasi untuk AndaUINavigationController
.3) Sebelum Anda melakukan segmentasi , tetapkan yang sebelumnya
UIViewController
sebagai properti ini.4) Dan sesuai dengan salah satu metode dalam
MyViewController
satuUINavigationControllerDelegate
sumber
Dalam kasus saya yang
viewWillDisappear
terbaik. Tetapi dalam beberapa kasus kita harus memodifikasi controller tampilan sebelumnya. Jadi, inilah solusi saya dengan akses ke view controller sebelumnya dan ini berfungsi di Swift 4 :sumber
Sebelum meninggalkan pengontrol saat ini saya harus menunjukkan peringatan. Jadi saya melakukannya dengan cara ini:
UINavigationController
denganUINavigationBarDelegate
Itu berhasil)
sumber
Tidak sulit seperti kita. Cukup buat bingkai untuk UIButton dengan warna latar belakang yang jelas, tetapkan tindakan untuk tombol dan letakkan di atas tombol navigasi belakang. Dan akhirnya lepaskan tombol setelah digunakan.
Berikut adalah contoh kode Swift 3 yang dilakukan dengan UIImage, bukan UIButton
menulis kode perlu dieksekusi
Hapus subView setelah tindakan dilakukan
sumber
Swift 4.2:
sumber
Swift 3:
sumber
Coba ini .
Coba ini juga.
sumber
cukup kontrol + seret bilah item ke func di bawah ini. bekerja seperti pesona
sumber
Anda dapat subkelas
UINavigationController
dan menimpapopViewController(animated: Bool)
. Selain dapat menjalankan beberapa kode di sana, Anda juga dapat mencegah pengguna kembali sama sekali, misalnya untuk meminta untuk menyimpan atau membuang pekerjaannya saat ini.Implementasi sampel di mana Anda dapat mengatur
popHandler
yang disetel / dihapus oleh pengendali terdorong.Dan contoh penggunaan dari pengontrol terdorong yang melacak pekerjaan yang belum disimpan.
Sebagai sentuhan yang bagus, ini juga akan dipanggil
interactivePopGestureRecognizer
ketika pengguna mencoba untuk kembali menggunakan gerakan menggesek.sumber
Ini solusi saya
Di pengontrol tampilan Anda, Anda dapat menangani seperti ini:
sumber
Seperti yang saya mengerti Anda ingin mengosongkan Anda
array
saat Anda menekan tombol kembali dan pop ke sebelumnyaViewController let
AndaArray
yang Anda muat di layar inisumber
sumber
sumber
Untuk Swift 5 , kita bisa memeriksanya karena akan menghilang
sumber
Swift 5 __ Xcode 11.5
Dalam kasus saya, saya ingin membuat animasi, dan ketika selesai, kembali. Cara untuk menimpa tindakan default tombol kembali dan memanggil tindakan kustom Anda adalah ini:
Atau Anda dapat menggunakan metode ini satu kali untuk menjelajahi hierarki tampilan NavigationBar, dan mendapatkan indeks untuk mengakses tampilan _UIButtonBarButton, dilemparkan ke UIControl, hapus tindakan target, dan tambahkan tindakan target kustom Anda:
sumber
Saya menyelesaikan ini dengan memanggil /
viewWillDisappear
mengganti dan kemudian mengakses tumpukannavigationController
seperti ini:sumber
Ini adalah bagaimana saya menyelesaikannya untuk masalah saya sendiri
sumber
Ini adalah solusi Swift 5 paling sederhana yang mungkin tidak mengharuskan Anda membuat tombol kembali khusus dan menyerahkan semua fungsi tombol kiri UINavigationController yang Anda dapatkan secara gratis.
Seperti yang direkomendasikan Brandon A di atas, Anda perlu menerapkan
UINavigationControllerDelegate
controller tampilan yang ingin Anda berinteraksi sebelum kembali ke sana. Cara yang baik adalah dengan membuat segmen bersantai yang dapat Anda lakukan secara manual atau otomatis dan menggunakan kembali kode yang sama dari tombol selesai atau tombol kembali.Pertama, buat pengontrol tampilan Anda menarik (yang ingin Anda deteksi kembali ke) delegasi pengontrol navigasi di
viewDidLoad
:Kedua, tambahkan ekstensi di bagian bawah file yang menimpa
navigationController(willShow:animated:)
Karena pertanyaan Anda menyertakan a
UITableViewController
, saya menyertakan cara untuk mendapatkan jalur indeks dari baris yang diketuk pengguna.sumber
Anda dapat melakukan sesuatu di Viewcontroller Anda
Untuk jawaban yang lengkap, gunakan Deteksi ketika tombol 'kembali' ditekan pada navbar
sumber