2012-02-27 3 views
0

Я новичок в IOS и, похоже, не могу заставить это работать, у меня есть входной файл, загруженный в мое приложение, из которого я хочу скрыть клавиатуру всякий раз, когда пользователь либо нажимает кнопку возврата, либо связанную кнопка (searchGo)resignfirstresponder crashes my ios app

Ниже мой код:

mainViewController.h

@interface kepnMainViewController : UIViewController <kepnFlipsideViewControllerDelegate, MKMapViewDelegate> 
{ 
    MKMapView *_mapView; 
    IBOutlet UITextField *searchBox; 
    IBOutlet UIBarButtonItem *searchGo; 
    IBOutlet UIBarButtonItem *searchNearby; 
    MKAnnotationView *annotationView; 
} 
@property (strong, nonatomic) MKMapView *_mapView; 
@property (strong, nonatomic) MapAnnotation *annotation; 
@property (strong, nonatomic) UIPopoverController *flipsidePopoverController; 
@property (strong, nonatomic) MKAnnotationView *annotationView; 
@property (strong, nonatomic) UIBarButtonItem *searchGo; 



- (IBAction)showInfo:(id)sender; 
- (IBAction)searchGo:(id)sender; 
- (IBAction)showNearby:(id)sender; 
- (IBAction)searchBoxReturn:(id)sender; 

- (void) setPlaceMarker: (CLLocationCoordinate2D) coord :(NSString*) title :(NSString*) subtitle; 
@end 

Соответствующие .m фрагмент

-(IBAction)searchGo:(id)sender 
{ 
    NSLog(@"sender object %@",sender); 


     [sender resignFirstResponder]; 


    NSLog(@"search button pressed and textbox = %@",searchBox.text); 


} 



-(IBAction)searchBoxReturn:(id)sender 
{ 
    NSLog(@"search box return "); 

    [sender resignFirstResponder]; 

} 

Извините, если это глупый вопрос, но что я делаю неправильно. ??

+0

Соединили ли вы свои объекты в Interface Builder (IB) с элементами GUI или у вас есть запрограммированный вид ? Однако, что вы можете проверить, является ли ваш отправитель своего рода UIResponder (если ([sender isKindOf: [UIResponder class]]) ...), и если ему разрешено уйти в отставку с первого ответчика (если ([(UIResponder *)) отправитель canResignFirstResponder]) ...) – GeT

+0

@GeT запрограммирован в основном –

ответ

2

UIBarButtonItem не является UIView и поэтому определенно не является UIResponder. Вместо этого это подкласс NSObject, который не отвечает на - (void)resignFirstResponder.

(решение: удалить [sender resignFirstResponder]; линии)

+0

Спасибо - так есть способ получить UIBarButton для этого. Или что более важно, почему UITextField, который является UIView, терпит неудачу? –

+0

Вам не нужно получать 'UIBarButtonItem', чтобы сделать это, так как он« отменен »сразу после того, как вы отпустите свой палец. Вам больше не нужно отходить от первого ответчика. – elslooo

+0

Чтобы скрыть клавиатуру, используйте '[searchBox endEditing: YES];' :) – elslooo

0

Если вы хотите скрыть же раскладке на кнопку крана взвалить на Ваш SearchBox является текущим Ответчик, чем вы должны написать

[searchBox resignFirstResponder]; // This will close keyboard 
1

Так что, если ваш вид вручную запрограммировано, чем вы можете добавить следующую проверку к своему коду:

if ([sender isKindOf: [UIResponder class]] == YES && [(UIResponder*)sender canResignFirstResponder] == YES) 
    [sender resignFirstResponder];