MKLocalSearch БЕЗ MKMapView

Я хотел бы использовать MKLocalSearch для отображения результатов для заранее определенной строки с результатами, относящимися к позиции пользователей, однако все примеры, которые я видел до сих пор, требуют или используют MKMapView для установки местоположения пользователей и, возможно, используют панель поиска для сбора текст, необходимый для поиска.

Я просто хотел бы выполнить поиск по предопределенной строке и загрузить результаты в виде таблицы, не имея сначала карты, есть ли хороший пример того, как это сделать?

Редактирование, чтобы добавить больше деталей, включая код, который я в настоящее время пытаюсь использовать. Этот код не создает таблицу результатов.

Дальнейшее редактирование: Анна ниже указала, что проблема может быть в UISearchDisplayController, однако я разорвал текущий код прямо из рабочего примера проекта, поэтому я действительно не могу понять, что происходит по-другому или почему UISearchDisplayController не показывает Результаты.

файл заголовка:

#import <UIKit/UIKit.h> #import <MapKit/MapKit.h> #import <CoreLocation/CoreLocation.h> @interface CallACabViewController : UIViewController <CLLocationManagerDelegate, UITableViewDataSource, UITableViewDelegate, UISearchDisplayDelegate> { CLLocationManager *locationManager; MKLocalSearch *localSearch; MKLocalSearchResponse *results; } -(IBAction)closeButtonClicked:(id)sender; @end 

файл реализации:

 - (void)viewDidLoad { [super viewDidLoad]; locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; [self.searchDisplayController setDelegate:self]; locationManager.distanceFilter = kCLDistanceFilterNone; locationManager.desiredAccuracy = kCLLocationAccuracyBest; [locationManager startUpdatingLocation]; } #pragma mark - LocationUpdating -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { CLLocation *newLocation = [locations lastObject]; CLLocation *oldLocation; if (locations.count > 1) { oldLocation = [locations objectAtIndex:locations.count-2]; } else { oldLocation = nil; } NSLog(@"didUpdateToLocation %@ from %@", newLocation, oldLocation); MKCoordinateRegion userLocation = MKCoordinateRegionMakeWithDistance(newLocation.coordinate, 1500.00, 1500.00); [self performSearch:userLocation]; } #pragma mark - Search Methods -(void)performSearch:(MKCoordinateRegion)aRegion { // Cancel any previous searches. [localSearch cancel]; [locationManager stopUpdatingLocation]; // Perform a new search. MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init]; request.naturalLanguageQuery = @"taxi"; request.region = aRegion; [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; localSearch = [[MKLocalSearch alloc] initWithRequest:request]; [localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error){ [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; if (error != nil) { [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Map Error",nil) message:[error localizedDescription] delegate:nil cancelButtonTitle:NSLocalizedString(@"OK",nil) otherButtonTitles:nil] show]; return; } if ([response.mapItems count] == 0) { [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"No Results",nil) message:nil delegate:nil cancelButtonTitle:NSLocalizedString(@"OK",nil) otherButtonTitles:nil] show]; return; } results = response; [self.searchDisplayController.searchResultsTableView reloadData]; }]; NSLog(@"DEBUG"); } #pragma mark - TableView Delegate Methods - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [results.mapItems count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *IDENTIFIER = @"SearchResultsCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:IDENTIFIER]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:IDENTIFIER]; } MKMapItem *item = results.mapItems[indexPath.row]; cell.textLabel.text = item.name; cell.detailTextLabel.text = item.placemark.addressDictionary[@"Street"]; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self.searchDisplayController setActive:NO animated:YES]; } -(IBAction)closeButtonClicked:(id)sender { [locationManager stopUpdatingLocation]; [self dismissViewControllerAnimated:YES completion:nil]; } @end 

Я получил эту работу в конце, но без использования таблицы поиска. Я сохранил результаты ответа, а затем реализовал свой собственный UITableView, присвоив каждому результату ячейке.

  • UITableViewCell не будет выделен
  • UITableViewCell подвижная анимация
  • Группировка и отношения основных данных UITableView
  • UITableView выбирает и отменяет выбор строки
  • UITableview становится отрывистым при прокрутке из-за создания пользовательских ячеек?
  • Как я могу работать с уведомлением об области, если результат обновлен после инициализации уведомления?
  • Xcode 8 iOS 10 Проблема UITableView: UIImageView, добавленный из раскадровки, отображается до тех пор, пока не будет прокручена таблица
  • Невозможно остановить навигационную панель, закрывающую толкаемый вид - почему это происходит?
  • как отменить pileular UILocalNotification в быстрой?
  • Можно ли изменить тип и размер шрифта в UITableView?
  • Как отключить режим редактирования в UITableView, когда больше нет ячеек для удаления?
  • Давайте будем гением компьютера.