Muncul animasi UIViewController yang dipanggil oleh pushViewController ditampilkan dua kali

Saya memiliki UISearchBar, dan saya ingin menampilkan UIViewController lain ketika saya mengklik tombol Cari dari UISearchBar. Saya menggunakan metode berikut untuk itu:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main"
                                                         bundle:nil];
    UIViewController *add =
    [storyboard instantiateViewControllerWithIdentifier:@"mainMenuViewController"];

    [self.navigationController pushViewController:add animated:YES];
}

Masalahnya adalah animasi UIViewController yang muncul dipanggil dua kali. Saya melihat dua kali Kontroler lama digeser dari sisi kanan ke kiri.

Sekarang, jika saya menggunakan kode yang sama untuk menampilkan pengontrol baru ketika mengklik beberapa UIButton biasa, masalah animasinya hilang. Jadi sepertinya ini ada hubungannya dengan UISearchBar.

Metode delegasi searchBarSearchButtonClicked dipanggil hanya sekali.

Kode untuk mereproduksi masalah sangat minim, mungkin saya akan melampirkan contoh proyek nanti.

Tapi UIVIewCONtroller dengan bilah Pencarian terlihat seperti ini:

- (void)viewDidLoad {
    [super viewDidLoad];

    UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 100, 20)];
    searchBar.placeholder = NSLocalizedString(@"search a pub or a place", nil);
    searchBar.delegate = self;
    [self.navigationItem setTitleView:searchBar];

}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    DLog(@"Filter searchBarSearchButtonClicked");
    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main"
                                                         bundle:nil];
    UIViewController *add =
    [storyboard instantiateViewControllerWithIdentifier:@"mainMenuViewController"];

    [self.navigationController pushViewController:add animated:YES];
}

Masalahnya ada di iOS 8 dan 9.

Sunting:

Saya mengunggah contoh proyek di sini. Ini sangat minimalis.

Sunting2:

Jika saya menyajikan pengontrol seperti ini, bukan melalui pengontrol navigasi, animasi hanya ditampilkan satu kali. (Ini adalah animasi lain - dari bawah ke atas, yang sebelumnya dari kanan ke kiri). Tapi saya perlu melakukannya melalui pengontrol navigasi. Jadi masalahnya sepertinya terkait dengan Pencarian UISearchBar yang diklik + Pengontrol Navigasi.

[self presentViewController:add
                   animated:YES
                 completion:nil];

Tentu saja saya juga bisa menyebutnya tanpa animasi seperti ini:

[self.navigationController pushViewController:add animated:NO];

Tapi bagaimana jika saya ingin animasi.

Sunting3:

Saya mencoba menampilkan pengontrol kedua melalui segue, tetapi tidak membantu.

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    [self performSegueWithIdentifier:@"seg1" sender:self];
}

Sunting4:

Saya telah melaporkan bug ini ke Apple karena menurut saya ini pasti bug di UIKit. Bagaimanapun, jika seseorang menemukan solusinya, itu akan bagus.


person luky    schedule 01.07.2016    source sumber
comment
Mungkin ada sesuatu yang tertukar dengan pemberhentian UISearchController. Satu hal yang perlu dicoba adalah memindahkan kode delegasi tombol Anda ke dalam metode dengan tanda tangan sederhana, lalu memanggilnya dengan self performSelector.   -  person danh    schedule 01.07.2016
comment
terima kasih atas idenya, saya sudah mencobanya, tetapi masalah masih ada.   -  person luky    schedule 04.07.2016


Jawaban (1)


Saya tidak menemukan apa pun di dokumen yang mengatakan bilah pencarian sebagai item navigasi titleView dilarang, tetapi itulah penyebab animasi yang tidak diinginkan.

Tambahkan tombol sebagai subview, dan satu animasi akan muncul saat ditekan. Perbaikan cepat adalah menghapusnya sebelum melanjutkan presentasi ...

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar 
{
    [self.navigationItem.titleView removeFromSuperview];

    // and so on with the OP code...

Anehnya, ini memperbaiki masalah animasi tambahan, namun tidak benar-benar menghilangkan bilah pencarian. Memeriksa titleView tepat setelah penghapusan menunjukkan bilah pencarian masih ada.

person danh    schedule 05.07.2016
comment
Tangkapan yang bagus! Jadi saya tidak tahu apakah saya harus mengandalkan solusi peretasan itu, karena solusi tersebut juga terlihat bermasalah (jika tidak menghilangkan tampilan) - tetapi berhasil, ya. Tombol mana yang dapat saya tambahkan sebagai subview dan di mana? - person luky; 18.07.2016
comment
mungkin saya dapat mengandalkan solusi peretasan itu, seperti jika solusi tersebut berfungsi pada saat waktu kompilasi, solusi tersebut akan berfungsi selamanya terlepas dari apakah Apple akan memperbaiki penghapusan tersebut di versi mendatang atau tidak. Saya tidak yakin. Tergantung apakah UIKit ditautkan dengan aplikasi yang dikompilasi, atau dipanggil secara dinamis. - person luky; 18.07.2016
comment
Senang itu membantu. Cara saya menangani ini adalah dengan menggunakan UISearchController seperti yang direkomendasikan dalam dokumen. Peretasan yang disarankan di sini adalah untuk menyiasati peretasan asli bilah pencarian sebagai tampilan judul. - person danh; 18.07.2016
comment
OK terima kasih. Saya punya kabar baik! Saya menemukan bug animasi juga terjadi jika Anda memfokuskan UINavigationBar dan kemudian mengklik beberapa UIButton biasa untuk menampilkan pengontrol baru. (Yang berfungsi dengan baik jika UINavigationbar tidak fokus!) Artinya, masalah juga terkait dengan fokus! Artinya, masalah terpecahkan juga jika Anda memanggil ini: [self.navigationItem.titleView resignFirstResponder]; sebelum menampilkan pengontrol baru. Tapi ide Anda juga membantu. - person luky; 20.07.2016