即使在viewDidLoad中设置了委托,UISearchBar也无法正常工作

时间:2015-08-20 17:07:21

标签: ios objective-c iphone ios8.1 xcode6.4

点击搜索栏时,searchBarBookmarkButtonClicked方法无法触发。我已经添加了self.searchBar.deleagate = self;,在我的.h文件中添加了<UISearchBarDelegate>

.h文件:

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>

@interface ViewController : UIViewController <UISearchBarDelegate,MKMapViewDelegate>

@property (strong, nonatomic) IBOutlet UISearchBar *searchBar;

@property (strong, nonatomic) IBOutlet MKMapView *myMap;

@end

.m文件:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
   self.searchBar.delegate = self;
   self.myMap.delegate = self;
}

- (void)searchBarBookmarkButtonClicked:(UISearchBar * )searchBar{
NSLog(@"working");

[self.searchBar resignFirstResponder];
NSLog(@"working");

CLGeocoder *geocoder = [[CLGeocoder alloc] init];

[geocoder geocodeAddressString:self.searchBar.text completionHandler:^(NSArray *placemarks, NSError *error) {
    CLPlacemark *placemark = [placemarks objectAtIndex:0];
    MKCoordinateRegion region;
    CLLocationCoordinate2D newLocation = [placemark.location coordinate];
    region.center = [(CLCircularRegion *)placemark.region center];

    MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
    [annotation setCoordinate:newLocation];
    [annotation setTitle:self.searchBar.text];
    [self.myMap addAnnotation:annotation];

    MKMapRect mr = [self.myMap visibleMapRect];
    MKMapPoint pt = MKMapPointForCoordinate([annotation coordinate]);
    mr.origin.x = pt.x - mr.size.width * 0.5;
    mr.origin.y = pt.y -mr.size.width * 0.25;
    [self.myMap setVisibleMapRect:mr animated:YES];
}];

}

@end

3 个答案:

答案 0 :(得分:2)

确保你有

  1. 所有代理设置正确,可以在代码中完成 在故事板中。
  2. 使用正确的委托方法来捕获     事件
  3. 如果您认为

    - (void)searchBarBookmarkButtonClicked:(UISearchBar * )searchBar
    

    然后尝试使用更直接的其他方法来触发搜索

    - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
    

答案 1 :(得分:1)

试试这个UISearchBar委托方法:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar

答案 2 :(得分:0)

谢谢@Rahul!结果我使用了错误的方法!

.h:

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>

@interface ViewController : UIViewController <UISearchBarDelegate,MKMapViewDelegate>

  @property (strong, nonatomic) IBOutlet UISearchBar *searchBar;

  @property (strong, nonatomic) IBOutlet MKMapView *myMap;

@end

的.m:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  // Do any additional setup after loading the view, typically from a nib.
  self.searchBar.delegate = self;
  self.myMap.delegate = self;
}

- (void)searchBarBookmarkButtonClicked:(UISearchBar * )searchBar{

[self.searchBar resignFirstResponder];

CLGeocoder *geocoder = [[CLGeocoder alloc] init];

[geocoder geocodeAddressString:self.searchBar.text completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *placemark = [placemarks objectAtIndex:0];
MKCoordinateRegion region;
CLLocationCoordinate2D newLocation = [placemark.location coordinate];
region.center = [(CLCircularRegion *)placemark.region center];

MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
[annotation setCoordinate:newLocation];
[annotation setTitle:self.searchBar.text];
[self.myMap addAnnotation:annotation];

MKMapRect mr = [self.myMap visibleMapRect];
MKMapPoint pt = MKMapPointForCoordinate([annotation coordinate]);
mr.origin.x = pt.x - mr.size.width * 0.5;
mr.origin.y = pt.y -mr.size.width * 0.25;
[self.myMap setVisibleMapRect:mr animated:YES];
}];

}

@end