I have two view controllers (Both Embedded in Navigation Controllers) in tab bar controller. ViewControllerA is has two buttons (MybuttonA and MybuttonB with enabled box unchecked in storyboard). ViewControllerB is a TableViewController. I would like to enable a buttons in ViewControllerA upon selecting specific rows in ViewControllerB table. Each button is expected to push different view controllers when enabled.
My present code works only when ViewControllersA and ViewControllersB are not embedded in Navigation Controllers. But without Navigation controller embedding, the enabled buttons does not push ViewControllers.
ViewControllerA.h
#import <UIKit/UIKit.h>
@interface ViewControllerA : UIViewController {
IBOutlet UIButton * MybuttonA;
IBOutlet UIButton * MybuttonB;
}
-(IBAction)mybuttonaction:(id)sender;
@property(strong,nonatomic)UIButton *MybuttonA;
@property(strong,nonatomic)UIButton *MybuttonB;
@end
ViewControllerA.m
#import "ViewControllerA.h"
@interface ViewControllerA ()
@end
@implementation ViewControllerA
@synthesize MybuttonA;
@synthesize MybuttonB;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
-(IBAction)mybuttonaction:(id)sender{
//write code to push view controller
}
ViewControllerB.h
#import <UIKit/UIKit.h>
#import "ViewControllerA.h"
@interface ViewControllerB : UITableViewController{
ViewControllerA *viewcontrollerA;
}
@property (nonatomic, retain) ViewControllerA *viewcontrollerA;
@end
ViewControllerB.m
#import "ViewControllerB.h"
#import "ViewControllerA.h"
@interface ViewControllerB () {
}
@end
@implementation ViewControllerB
@synthesize viewcontrollerA;
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"CONTENTS";
self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(reload) forControlEvents:UIControlEventValueChanged];
[self reload];
[self.refreshControl beginRefreshing];
viewcontrollerA = [self.tabBarController.viewControllers objectAtIndex:0];
}
#pragma mark - Table View
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{return 1;}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
{return 5;}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.textLabel.text = [NSString stringWithFormat: @"Cell #%d", indexPath.row];
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
NSString* value = [tableView cellForRowAtIndexPath:indexPath].textLabel.text;
if ([value isEqual:@"1"]){
viewcontrollerA.MybuttonA.enabled=YES;
}
else if ([value isEqual:@"2"])
{
viewcontrollerA.MybuttonB.enabled=YES;
}
}
else {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
}
}
@end
Use this:
viewcontrollerA = ((UINavigationController*)[self.tabBarController.viewControllers objectAtIndex:0] ).topViewController
Instead of this:
viewcontrollerA = [self.tabBarController.viewControllers objectAtIndex:0];