Dancer
Dancer

Reputation: 17651

Calling a function from a button

Can anyone help me to understand what is going wrong with my function below pls?

I'm fairly new to native IOS dev.

I wanted to implement a side panel into our app using this tutorial (http://www.appcoda.com/ios-programming-sidebar-navigation-menu/).
All that works fine and is straightforward enough - but I wanted to trigger the reveal functionality via a standard button rather than a dynamic button in the header - to suit our design..

The original code is as follows -

#import "SWRevealViewController.h"


// Change button color
_sidebarButton.tintColor = [UIColor colorWithWhite:0.96f alpha:0.2f];

// Set the side bar button action. When it's tapped, it'll show up the sidebar.
_sidebarButton.target = self.revealViewController;
_sidebarButton.action = @selector(revealToggle:);

// Set the gesture
[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];

to replicate that functionality triggered by a button I added the following to the .h file -

@property (weak, nonatomic) IBOutlet UIBarButtonItem *sidebarButton;

@property (weak, nonatomic) IBOutlet UIButton *revealLeftBtn;
- (IBAction)btnClickRevealL:(id)sender;

and the following in my .m file

- (IBAction)btnClickRevealL:(id)sender {


[self.revealViewController];
[@selector(revealToggle:)];

}

I get the error 'suspected identifier' for the above lines - I dont understand how the functions triggered with the previous method and not with the above - can anyone help? Cheers

for reference this is the entire .M file -

#import "MainViewController.h"
#import "SWRevealViewController.h"


@interface MainViewController ()

@end

@implementation MainViewController

- (void)viewDidLoad
{
[super viewDidLoad];

self.title = @"";

// Change button color
_sidebarButton.tintColor = [UIColor colorWithWhite:0.96f alpha:0.2f];

[self.navigationController.navigationBar setTranslucent:TRUE];

// Set the side bar button action. When it's tapped, it'll show up the sidebar.






// Set the gesture
[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];




}

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

- (IBAction)btnClickRevealL:(id)sender {


[self.revealViewController];
[@selector(revealToggle:)];

}
@end

Upvotes: 0

Views: 2354

Answers (2)

Mannam Brahmaiah
Mannam Brahmaiah

Reputation: 2283

- (IBAction)logInBtnClicked:(id)sender {
    //Remove WhiteSpace from start of uitextfield
    self.emailIdTxtFldRef.text = [self.emailIdTxtFldRef.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
    self.passwordTxtFldRef.text = [self.passwordTxtFldRef.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
    if ([self.emailIdTxtFldRef.text isEqualToString:@""]||[self.passwordTxtFldRef.text isEqualToString:@""]) {
        [self showMessage:@"All fields are mandatory" withTitle:@"Error"];
    }else{
        SWRevealViewController *revealVC = [self.storyboard instantiateViewControllerWithIdentifier:@"swRevealViewContoller"];
        revealVC.delegate=self;
        [[UIApplication sharedApplication]keyWindow].rootViewController = revealVC;
    }
}

Upvotes: 0

Antonio MG
Antonio MG

Reputation: 20410

This line:

 (IBAction)btnClickRevealL:(id)sender {


[self.revealViewController];
[@selector(revealToggle:)];

}

Does nothing.

I guess this is what you want to do:

[self.revealViewController revealToggle:sender];

When you set the target and the action of a button, you set which class is doing the action (target) and what method is called (action).

that's the equivalent of doing [target action]

Upvotes: 8

Related Questions