Maurício Giordano
Maurício Giordano

Reputation: 3276

Can't connect IBAction to view

I'm new to iOS and I'm following this tutorial.

Here is a screenshot of me trying to connect an IBAction to my view.

I want to execute the method releaseKeyboard whenever I touch the view (ie. close the keyboard).

I'm not using storyboard.

screenshot

My files:

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

What am I doing wrong?

Thanks

Upvotes: 0

Views: 722

Answers (2)

Timothy Moose
Timothy Moose

Reputation: 9915

Just change the view's class from UIView to UIControl in the identity inspector and then you can connect IBActions.

Upvotes: 3

Rich
Rich

Reputation: 8202

You can add a UITapGestureRecognizer to self.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];
}

The target of the gesture recogniser points to your releaseKeyboardAction method.

Upvotes: 5

Related Questions