2014-02-19 71 views
0

我是iOS新手,我正在关注this tutorial无法连接IBAction查看

下面是我试图将IBAction连接到我的视图的屏幕截图。

我想在每次触摸视图(即关闭键盘)时执行方法releaseKeyboard

我不使用故事板。

screenshot

我的文件:

  • challAppDelegate.h
  • challAppDelegate.m
  • challViewController.h
  • challViewController.m
  • challViewController.xib

challAppDelegate.h

#import <UIKit/UIKit.h> 

@interface challAppDelegate : UIResponder <UIApplicationDelegate> 
{ 
    UINavigationController *navigationController; 
} 

@property (strong, nonatomic) UIWindow *window; 
@property (strong, nonatomic) UINavigationController *navigationController; 

@end 

challAppDelegate.m

#import "challAppDelegate.h" 
#import "challViewController.h" 

@implementation challAppDelegate 

@synthesize window = _window; 
@synthesize navigationController; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UIViewController *rootController = 
    [[challViewController alloc] 
    initWithNibName:@"challViewController" bundle:nil]; 

    navigationController = [[UINavigationController alloc] 
          initWithRootViewController:rootController]; 

    self.window = [[UIWindow alloc] 
        initWithFrame:[[UIScreen mainScreen] bounds]]; 
    [self.window addSubview:navigationController.view]; 
    [self.window makeKeyAndVisible]; 
    return YES; 

} 
... 
... 

challViewController.h

#import <UIKit/UIKit.h> 

@interface challViewController : UIViewController 

@property(nonatomic, retain) IBOutlet UITextField *signInEmailAddress; 
@property(nonatomic, retain) IBOutlet UITextField *signInPassword; 

@property(nonatomic, retain) IBOutlet UIButton *signInSignInButton; 
@property(nonatomic, retain) IBOutlet UIButton *signInRegisterButton; 

-(void) releaseKeyboardAction; 

-(IBAction) signInAction:(int)sender; 

-(IBAction) registerAction:(int)sender; 

-(IBAction) releaseKeyboard:(id)sender; 

@end 

challViewController.m

#import "challViewController.h" 

@interface challViewController() 

@end 

@implementation challViewController 

@synthesize signInEmailAddress; // cria os getters e setters 
@synthesize signInPassword; // cria os getters e setters 

@synthesize signInSignInButton; // cria os getters e setters 
@synthesize signInRegisterButton; // cria os getters e setters 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

    self.title = @"Sign In"; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void)releaseKeyboardAction 
{ 
    [signInEmailAddress resignFirstResponder]; 
    [signInPassword resignFirstResponder]; 
} 

- (IBAction)releaseKeyboard:(id)sender 
{ 
    [self releaseKeyboardAction]; 
} 

- (IBAction)registerAction:(int)sender 
{ 
    // 
} 

- (IBAction)signInAction:(int)sender 
{ 
    // 
} 

@end 

我做错了什么?

感谢

+1

您无法将“IBAction”作为IBOutlet连接到您的视图。你想对视图和'releaseKeyboard:'方法做什么? – Rich

+0

在按下视图中的任何位置时释放键盘(因为键盘没有退出按钮)。我没有将IBActions连接到textFields和按钮。 –

+0

有一个“完成”按钮 - 当你在键盘上按下这个按钮时,你想让键盘消失吗? – Rich

回答

5

您可以添加到UITapGestureRecognizerself.view

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

    self.title = @"Sign In"; 

    UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(releaseKeyboardAction)]; 
    [self.view addGestureRecognizer:gesture]; 
} 

手势识别器指向你的releaseKeyboardAction方法的目标。

+0

它工作!谢谢! –

+1

这是正确的,但您也可以在笔尖编辑器中添加手势识别器。无需打字!只需将Tap Gesture Recognizer拖动到视图中,然后选择手势识别器,转到连接检查器,然后从Received Actions拖动到视图控制器并进行IBAction连接。 – jsd

+0

@MaurícioGiordano我仍然会让键盘上的“完成”按钮关闭键盘! :) – Rich

3

只需在身份检查员中将视图的类从UIView更改为UIControl,然后就可以连接IBActions