6

Tablo görünümü ve arama çubuğuyla bir üst sınıf var, bunun üzerinde bir tablo görünümü denetleyicisi alt sınıfı var. SearchBar ve searchdisplaycontroller için temsilciler, UISearchdisplaycontroller öğesinden devralınan ayrı bir sınıfta ayarlanır. Tablo görünümü ve arama çubuğu için veri kaynağı ve delegeler bu sınıfta ayrı ayrı ele alınmaktadır. Sınıflar ARC altında. Bu nedenle, bir kullanıcı aramaya dokunduğunda, denetim FilesListController (ana) sınıfından bu sınıfa aktarılır. iptal düğmesi üzerinde bir kullanıcı musluklar, arayıcı temsilci bu sınıfın yaniArama görünümü kapatılamıyor

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar 

ayarlanan zaman şimdi, DİYE ancak tam ekran searchtableview görevden amacına hizmet ve parentviewcontroller dönmek DEĞİLDİR. Ancak, bu delegeyi arama sınıfına yazmazsam, düzgün çalışır. Böyle

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar 

: Ben xib ve çağırmayı arayıcı delege belirledik

self.searchResultsTableView.delegate = self; 
self.searchResultsTableView.dataSource = self; 
[parentFileViewController.searchDisplayController setDelegate:self]; 

Nerede yanlış gidiyorum? Şimdiden teşekkürler.

+0

[self.searchDisplayController setActive: NO anima ted: EVET]; – jussi

+0

hey teşekkürler @jussi .. işe yarıyor! Ama neden kendi başına atmıyor? Bu, arama denetleyicisini reddetmek için zorluyor gibi. –

+0

Bazıları, Denetleyiciyi dağıtmadan önce bazı bilgileri depolamak istediği için. Bunu bir cevap olarak göndereceğim. – jussi

cevap

13

yani temsilci işlevinde yanıtlayıcısını istifa uygulamalıdır:

[self.searchDisplayController setActive:NO animated:YES]; 
1

Eğer bir SearchBarController ile UISearchBar görevden sadece bu kod kullanmak istiyorsanız

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar { 
     [searchBar resignFirstResponder]; 
} 
+0

Bu, yalnızca klavyeyi kapatır, ancak Arama Görünümü ve iptal düğmesini kapatmaz. –

+0

bu durumda, jussi haklı – cekisakurek

-1

Bellek uyarıları da görünebilir Uygulama çalışma süresinde herhangi bir zamanda, bir hafıza uyarısının gerçekleşeceğini ve görünüm ve atılabilir nesnelerin yeniden oluşturulması gerektiğini varsaymalısınız.

- (void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 

if([self isViewLoaded] && self.view.window == nil) 
{ 
    self.view = nil; 
    keys = nil; 
    names = nil; 
    errorDuringNetworkCall = nil; 
} 
} 

Ve segue işlemini gerçekleştirmeden önce arama çubuğu tableView işten çıkararak:

Biz diziler nil için ayarlayarak böyle kontrol etmektedirler alındığında bir bellek uyarıları üzerine

[self performSegueWithIdentifier:@"navigateToNextScreen" sender:self]; 
self.searchBar.text = @""; 
[self.searchDisplayController setActive:NO animated:YES]; 

viewDidLoad yöntemi yeniden çağrılır ve diziler doldurulur, arama çubuğu yararlı olmaya devam eder. sorunlar olmadan çalışır

+0

Bunu hiç bir soruya cevap olarak görmüyorum –

İlgili konular