无法以编程方式将 UINavigationController 添加到 TabBar 应用程序

发布于 2024-11-30 08:30:23 字数 2591 浏览 1 评论 0原文

我有一个使用 TabBar 模板的应用程序。在其中一个视图控制器中,我想添加一个 uinavigationcontroller。我在.h文件中声明它;

#import <UIKit/UIKit.h>
#import "AnotherViewController.h"

@interface SecondViewController : UIViewController <UINavigationControllerDelegate> {
    UIButton *UIButton *gotoAnotherView;;
    AnotherViewController *anotherView;
    UINavigationController *navigationController;
}

@property(nonatomic,retain) UIButton *UIButton *gotoAnotherView;;
@property(nonatomic,retain) AnotherViewController *anotherView;
@property(nonatomic,retain) UINavigationController *navigationController;

-(void)buttonPressed:(id)sender;

@end

这是我的 .m 文件

#import "SecondViewController.h"


@implementation SecondViewController

@synthesize navigationController, anotherView, gotoAnotherView;


-(void)buttonPressed:(id)sender {

    anotherView = [[AnotherViewController alloc]init];
    [navigationController pushViewController:anotherView animated:YES];
}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{

    navigationController = [[UINavigationController alloc ]initWithRootViewController:self];
    [navigationController.navigationBar setFrame:CGRectMake(0, 0, 320, 44)];

    [self.view addSubview:navigationController.navigationBar];

    gotoAnotherView = [[UIButton alloc] initWithFrame:CGRectMake(50, 50, 40, 40)]; //kategoributonlari

    UIImage *image = [UIImage imageNamed:@"1.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.frame = CGRectMake(110, 5, 100, 20);
    [self.view addSubview:imageView];

    [kategori1 setBackgroundImage:image forState:UIControlStateNormal];

    [kategori1 addTarget:self 
               action:@selector(buttonPressed:)
     forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:kategori1];

    [super viewDidLoad];

}




- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc. that aren't in use.
}


- (void)viewDidUnload
{
    [super viewDidUnload];

    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

但是我可以从导航栏中看到导航控制器更深一层(出现后退按钮),但主视图与我的 gotoAnotherView 按钮保持不变。

我认为我可能不会让导航控制器控制整个视图。

I have an application for which I use TabBar template. In one of viewcontrollers I want to add a uinavigationcontroller. I declare it in the .h file;

#import <UIKit/UIKit.h>
#import "AnotherViewController.h"

@interface SecondViewController : UIViewController <UINavigationControllerDelegate> {
    UIButton *UIButton *gotoAnotherView;;
    AnotherViewController *anotherView;
    UINavigationController *navigationController;
}

@property(nonatomic,retain) UIButton *UIButton *gotoAnotherView;;
@property(nonatomic,retain) AnotherViewController *anotherView;
@property(nonatomic,retain) UINavigationController *navigationController;

-(void)buttonPressed:(id)sender;

@end

And here's my .m file

#import "SecondViewController.h"


@implementation SecondViewController

@synthesize navigationController, anotherView, gotoAnotherView;


-(void)buttonPressed:(id)sender {

    anotherView = [[AnotherViewController alloc]init];
    [navigationController pushViewController:anotherView animated:YES];
}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{

    navigationController = [[UINavigationController alloc ]initWithRootViewController:self];
    [navigationController.navigationBar setFrame:CGRectMake(0, 0, 320, 44)];

    [self.view addSubview:navigationController.navigationBar];

    gotoAnotherView = [[UIButton alloc] initWithFrame:CGRectMake(50, 50, 40, 40)]; //kategoributonlari

    UIImage *image = [UIImage imageNamed:@"1.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.frame = CGRectMake(110, 5, 100, 20);
    [self.view addSubview:imageView];

    [kategori1 setBackgroundImage:image forState:UIControlStateNormal];

    [kategori1 addTarget:self 
               action:@selector(buttonPressed:)
     forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:kategori1];

    [super viewDidLoad];

}




- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc. that aren't in use.
}


- (void)viewDidUnload
{
    [super viewDidUnload];

    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

However I can see from the navigation bar that the navigationcontroller goes one level deeper(back button appears) but the main view remains the same with my gotoAnotherView button.

I think that I might not make the navigationcontroller control the whole view.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心作怪 2024-12-07 08:30:23

不要尝试在代码中执行此操作,而是编辑主窗口的 XIB(使用 UITabBarController)。将 UINavigationController 从库拖到选项卡栏上。这将为您创建一个带有 UINavigationController 的新栏项。选择嵌套在新 UINavigationController 中的 UIViewController,然后在“标识”选项卡上将“类”设置为视图控制器,然后在“属性”选项卡上指定要加载的 nib 文件的名称。

Instead of trying to do this in code, edit the XIB for your main window (with the UITabBarController). Drag out a UINavigationController from the Library onto the tab bar. This will create a new bar item for you, with a UINavigationController. Select the UIViewController nested in the new UINavigationController, and on the Identity tab set the Class to your view controller, and on the Attributes tab specify the name of the nib file to load.

烟雨凡馨 2024-12-07 08:30:23

你不需要使用IB。您可以在代码中设置一切。首先创建视图控制器 tab1ViewController、tab2ViewController 等,然后使用 tab1ViewController 等根视图控制器创建导航控制器,然后将这些控制器添加到选项卡栏控制器。

这是一个示例:

UINavigationController *tab1NavigationController = [[UINavigationController alloc] initWithRootViewController:tab1ViewController];
UINavigationController *tab2NavigationController = [[UINavigationController alloc] initWithRootViewController:tab2ViewController];
UITabBarController rootViewController = [[UITabBarController alloc] init];
rootViewController.viewControllers = [NSArray arrayWithObjects:tab1NavigationController, tab2NavigationController, nil];
[tab1NavigationController release];
[tab2NavigationController release];

You don't need to use IB. You can setup everything in code. First create your view controllers tab1ViewController, tab2ViewController, etc. then create the navigation controller with the root view controllers of tab1ViewController etc. and then add these controllers to the tab bar controller.

Here is a sample:

UINavigationController *tab1NavigationController = [[UINavigationController alloc] initWithRootViewController:tab1ViewController];
UINavigationController *tab2NavigationController = [[UINavigationController alloc] initWithRootViewController:tab2ViewController];
UITabBarController rootViewController = [[UITabBarController alloc] init];
rootViewController.viewControllers = [NSArray arrayWithObjects:tab1NavigationController, tab2NavigationController, nil];
[tab1NavigationController release];
[tab2NavigationController release];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文