2012-02-27 206 views
0

我是IOS的新手,似乎无法得到这个工作,我有一个输入在我的应用程序,从中我想要隐藏键盘,每当用户按下返回或关联按钮(searchGo)resignfirstresponder崩溃我的ios应用程序

以下是我的代码:

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]])...),并且允许它退出第一个响应者(if([(UIResponder *))发件人canResignFirstResponder]))...) – GeT 2012-02-27 18:27:22

+0

@GeT编程主要是 – 2012-02-27 18:30:06

回答

2

UIBarButtonItem不是一个UIView因此绝对不是UIResponder。相反,它是NSObject的一个子类,它不响应- (void)resignFirstResponder

(解决方案:去掉[sender resignFirstResponder];线)

+0

谢谢 - 有没有办法让UIBarButton来做到这一点。或者更重要的是,为什么UITextField是UIView失败? – 2012-02-27 18:16:26

+0

您不需要获得'UIBarButtonItem'来执行此操作,因为释放手指后会立即“取消选择”。你不需要再次辞去第一个响应者。 – elslooo 2012-02-27 18:18:52

+0

为了隐藏键盘,使用'[searchBox endEditing:YES];':) – elslooo 2012-02-27 18:19:15

0

如果你想隐藏keybord按钮自来水假设你的搜索框是当前的响应比你应该写

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

所以,如果你的观点是手动编程比您可能会将以下检查添加到您的代码中:

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