У меня есть UIViewController «NavigationViewController», который добавляется как подпредставление моего «FirstViewController», занимающего весь экран (то есть аналогично контроллеру Flipboard Navigation в приложении iPad). Многие виды добавляются и удаляются в зависимости от выбора пользователя. Я хочу быть в состоянии выдвинуть контроллер представления в «FirstViewController» navigationController из «множества представлений», которые добавлены. В этом случае «FeaturedViewController» является одним из тех многочисленных представлений, которые можно выбрать. Он наследует ContentViewController, где определен протокол делегата.
TL; DR Я хочу получить доступ к навигационному контроллеру в первом представлении, чтобы выдвинуть представление из добавленного подпредставления «FeaturedViewController».
Вот визуальное представление:
Вот мой код от:
Вот моя текущая попытка, которая не работает. Обратите внимание, я взял некоторый код, относящийся к «контроллеру навигации»
/* First View Controller */
#import <UIKit/UIKit.h>
#import "ContentViewController.h"
@interface ViewController : UIViewController <BaseViewDelegate, ContentViewDelegate>
{
IBOutlet UINavigationController *navigationController;
ContentViewController *contentView;
}
@property (strong, nonatomic) IBOutlet UINavigationController *navigationController;
@property (strong, nonatomic) ContentViewController *contentView;
---------------------------------------------------------
#import "ViewController.h"
#import "NavigatorViewController.h"
#import "BinViewController.h"
@implementation ViewController
@synthesize navigationController, contentView;
static NSArray *viewArray = nil;
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.navigationController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self.view addSubview:navigationController.view];
// Navigation View is used to navigate throughout the entire application
NavigatorViewController *navController = [[NavigatorViewController alloc] init];
contentView = [[ContentViewController alloc] init];
contentView.delegate = self;
// Add the views to the array (using ARC)
viewArray = [NSArray arrayWithObjects:navController, contentView, nil];
}
-(void)displayNavigator
{
// Get the right view controller
UIViewController *viewController = [viewArray objectAtIndex:0];
// Add the subview to the view
[self.view addSubview:viewController.view];
}
-(void)pushViewController:(UIViewController *)viewController
{
NSLog(@"First View Push View Controller called");
[self.navigationController pushViewController:viewController animated:YES];
}
@end
/* Content View Controller */
@class ContentViewController;
@protocol ContentViewDelegate <NSObject>
-(void)pushViewController:(UIViewController *)viewController;
@end
@interface ContentViewController : UIViewController
{
__weak id <ContentViewDelegate> delegate;
}
@property (weak) __weak id <ContentViewDelegate> delegate;
- (void)pushView:(UIViewController *)viewController;
@end
---------------------------------------------------------
#import "ContentViewController.h"
#import "BinViewController.h"
@implementation ContentViewController
@synthesize delegate;
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)pushView:(UIViewController *)viewController
{
NSLOG(@"Push View from ContentViewController");
if ([delegate respondsToSelector:@selector(pushViewController)])
[delegate pushViewController];
}
@end
/* View that is added to the navigator view (it inherits ContentViewController where the delegate protocol is defined)*/
#import <UIKit/UIKit.h>
#import "ContentViewController.h"
@interface FeaturedViewController : ContentViewController <CustomPagingDelegate>
@end
---------------------------------------------------------
#import "FeaturedViewController.h"
#import "BinViewController.h"
@implementation FeaturedViewController
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void) touchUpInsideItemAtIndex:(NSUInteger)itemIndex
{
// [[[[[self view] superview] superview] superview] removeFromSuperview];
NSLOG(@"Touch up inside from featured view");
BinViewController *binViewController = [[BinViewController alloc] init];
[self pushView:binViewController];
}
@end