2014-09-13 22 views
25

Aşağıdakileri nasıl düzeltiyorsunuz? Neyi eksik? searchDisplayController iOS'ta kullanımdan kaldırıldı 8

bana bir hata veriyor searchResultsController searchController için düzeltme

if (tableView == self.searchDisplayController.searchResultsTableView) { 
     cell.textLabel.text = [searchResults objectAtIndex:indexPath.row]; 
    } else { 
     cell.textLabel.text = [_content objectAtIndex:indexPath.row]; 
    } 

    return cell; 
} 

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller 
    shouldReloadTableForSearchString:(NSString *)searchString 
{ 
    [self filterContentForSearchText:searchString 
           scope:[[self.searchDisplayController.searchBar scopeButtonTitles] 
         objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]]; 
    return YES; 
} 
+3

ve bu arkadaşı ne olabileceğini hiç? lütfen düzenlenmiş yazıya bakın lütfen ... –

+1

Bir tane yok. İhtiyaçlarınızı takip etmek için kendi ivarınızı veya mülkünüzü ekleyebilirsiniz. – rmaddy

+4

Şaka yapıyor musun? Neden her zaman ücretsiz olarak sağlanan böyle kolay bir görevi gerçekleştirmek için bunu yapmak zorundayım? Apple ne düşünüyor? –

cevap

12

UISearchController sınıf aramayla ilgili arayüzleri görüntüsünü yönetmek için UISearchDisplayController sınıfını değiştirir "nesne bulunamadı".

Kaynak: rmaddy söylediği gibi sen kaldırılmış uyarıları kurtulmak istiyorsanız https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS8.html

yüzden, bu onaylanmamış sınıfları kullanmayı bırakın. Bunun yerine UISearchController kullanın: Ben UISearchDisplayController den UISearchController göç ​​etmek bakıyordu

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UISearchController/index.html#//apple_ref/occ/cl/UISearchController

+9

Apple, kullanımdan kaldırılmış sınıfları Interface Builder'dan kaldırırsa yararlı olacaktır. –

4

. Yani, bunu GitHub'da buldum: https://github.com/dempseyatgithub/Sample-UISearchController
İndir/klonla ve 'un UITableView ve UICollectionView ile nasıl kullanılacağını görebileceksiniz.
UISearchDisplayController'dan UISearchController'a yükseltmeniz gereken her şeye sahiptir.
UISearchController belgeleri de gerçekten yararlıdır. Başlamak için, Sample-UISearchController/MasterViewController_TableResults.m ve Sample-UISearchController/MasterViewController_FilterResults.m
'a bakın. Ayrıca, iOS 7'yi desteklemeniz gerekiyorsa (eğer uygulamanızı gerçekten dağıtmak istiyorsanız gerçekten tavsiye ederim) App Store) bunu:

if([UISearchController class]){ 
//Create an UISearchController and add it to your UITableViewController 
}else{ 
//Create an UISearchDisplayController and add it to your UITableViewController 
} 

Not: iOS'un her iki sürümünü desteklemek isterseniz programlama yoluyla her şeyi yapmak gerekecek.

0

Yeni UISearchController ürününün düzgün bir şekilde döndürülmesi için uzun zamandır çalışıyoruz.

İşte böyle görünüyordu önce: Biz aslında düzgün dönme işi yapmaya "vazgeçti" kadar süre geçtikten sonra

. Bunun yerine, döndürme gerçekleşmeden önce arama denetleyicisini gizleriz. Kullanıcı daha sonra arama çubuğunu tekrar açmak için döndürülen görünümde arama düğmesine basmak zorundadır.

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 
    [self.searchController dismissViewControllerAnimated:YES completion:nil]; 
    self.searchControllerWasActive = NO; 
    self.searchButton.enabled = YES; 
} 

Önemli not:

İlgili kod İşte Bizim kod UIViewController değil UITableViewController kullanır. Ekranda, UITableViewController kullanamadığımız için ek düğmeler gerekiyor. UISearchController bir UITableViewController kullanarak döndürme sorunları sergilemez.

Bunu, UISearchController'ın geçerli durumu dikkate alınarak gerekli bir çalışma olarak görüyoruz. Bu soruna gerçek bir çözüm bulmak çok daha iyi olurdu.

8

Bunu ekleyin.h dosyası

<UISearchBarDelegate,UISearchResultsUpdating> 

NSArray *searchResultsArray; 
NSMutableArray *userMutableArray; 

@property (retain, nonatomic) UISearchController *searchController; 

ve bu .m dosyasında

userMutableArray = [[NSMutableArray alloc] initWithObjects:@"Jack",@"Julie", nil]; 
searchResultsArray = [[NSArray alloc]init]; 

self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil]; 
self.searchController.searchBar.scopeButtonTitles = [[NSArray alloc]initWithObjects:@"UserId", @"JobTitleName", nil]; 
self.searchController.searchBar.delegate = self; 
self.searchController.searchResultsUpdater = self; 
[self.searchController.searchBar sizeToFit]; 
self.searchController.dimsBackgroundDuringPresentation = NO; 
self.definesPresentationContext = YES; 
self.tableView.tableHeaderView = self.searchController.searchBar; 


-(void)updateSearchResultsForSearchController:(UISearchController *)searchController{ 
    NSString *searchString = self.searchController.searchBar.text; 
    NSPredicate *resultPredicate; 
    NSInteger scope = self.searchController.searchBar.selectedScopeButtonIndex; 
    if(scope == 0){ 
     resultPredicate = [NSPredicate predicateWithFormat:@"userId contains[c] %@",searchString]; 
    }else{ 
     resultPredicate = [NSPredicate predicateWithFormat:@"jobTitleName contains[c] %@",searchString]; 
    } 
    searchResultsArray = [userMutableArray filteredArrayUsingPredicate:resultPredicate]; 
    [self.tableView reloadData]; 
} 

- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope{ 
    [self updateSearchResultsForSearchController:self.searchController]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    if(self.searchController.active){ 
     return [searchResultsArray count]; 
    }else{ 
     return [userMutableArray count]; 
    } 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *cellIdentifier; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if(!cell){ 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
    } 
    if(self.searchController.active){ 
     cell.textLabel.text = [searchResultsArray objectAtIndex:indexPath.row]; 
    }else{ 
     cell.textLabel.text = [userMutableArray objectAtIndex:indexPath.row]; 
    } 
    return cell; 
} 
+1

Bu cevap harika çalışıyor. –

+0

Bu, asıl soruya verilen en iyi yanıttır - kullanımdan kaldırılmış UISearchDisplayController'ı UISearchController kullanarak nasıl dönüştürüleceğine dair pratik ve çalışan bir örnek gösterir. – mbbeme

+0

basit ve ayrıntılı cevap. –