【发布时间】:2011-12-22 23:57:18
【问题描述】:
我有一个 UIViewController “NavigationViewController”,它被添加为占据整个屏幕的“FirstViewController”的子视图(即类似于 iPad 应用程序中的 Flipboard Navigation 控制器)。根据用户所做的选择添加和删除许多视图。我希望能够从添加的“许多视图”中将视图控制器推送到“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
【问题讨论】:
标签: iphone objective-c ios ipad delegates