iphone - UITabBars 无法识别导航栏和导航栏隐藏 TableView Controller

标签 iphone ios objective-c uinavigationcontroller uitableview

我在导航栏内有一个 View Controller ,它推送一个标签栏 View Controller ,它有 4 个选项卡和 View Controller 。当我在 TabBarViewController 的 viewDidLoad 中 NSLog(@"%@", self.navigationController) 时,它显示为(null)。甚至 NSLog(@"%@",self.tabBarController) 在 TabBarViewController 的 viewDidLoad 中也是 (null)。这很奇怪,因为我有一个选择器,用于后退按钮,称为 dismissTab 并且我弹出 View Controller 并且它可以工作。如果我在那里使用 NSLog,它不会显示为 (null),所以某处有问题。我有一种感觉,这就是我的每个选项卡的 ViewController 被 NavigationBar 和 TabBar 隐藏的原因。我已经阅读了有关 NavigationBar/TabBars 隐藏/覆盖 Controller 的一部分的帖子,但他们都只是找到了一个 hack 来调整 TableView 的大小或向下/向上移动更多对象。我想找到解决方案。

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    UIStoryboard *iPhoneStoryBoard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
    ViewController *mainViewController = (ViewController*)[iPhoneStoryBoard instantiateViewControllerWithIdentifier:@"HomePage"];
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:mainViewController];

    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

ViewController.m 当我按下 tabBars 时

UIStoryboard *iPhoneStoryBoard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
        GRxTabBarViewController *tabViewController = (GRxTabBarViewController*) [iPhoneStoryBoard instantiateViewControllerWithIdentifier:@"GRxTabBarViewController"];

PViewController *pController = [tabViewController.viewControllers objectAtIndex:0];
SViewController *sController = [tabViewController.viewControllers objectAtIndex:1];
IViewController *iController = [tabViewController.viewControllers objectAtIndex:2];
MViewController *mController = [tabViewController.viewControllers objectAtIndex:3];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:iController];

[tabViewController setViewControllers:[NSArray arrayWithObjects:pController, sController, navController, mController, nil]];
[self.navigationController pushViewController:tabViewController animated:YES];

我不知道哪里出错了,因为在 GRxTabBarViewController 的 viewDidLoad 中,我为后退按钮和一个选择器设置了一个图像,它起作用了,因为图像已设置并且选择器弹出它离开了堆栈。我还可以在 pViewController、iViewController、sViewController 和 mViewController 中加载数据和执行操作。

有人遇到这个问题或知道他们可以指导/指导我的解决方案吗?任何事情都有助于诚实。提前致谢!

最佳答案

看起来您正在使用 Storyboard 在导航 Controller 中连接标签栏 Controller 。我认为 Storyboard 允许你这样做,但我不确定这是否是标准的做法——除非你有一个非常引人注目/不可能做的要求,否则你应该总是能够使用标签栏 Controller 作为切换 View 的控制 Controller ,然后将您的导航 Controller 作为 Root View Controller 放在任何选项卡栏 View 中。 我建议您查看更改 Controller 层次结构实现的可能性。从您的代码来看,这似乎是可行的 - AppDelegate.m 和 ViewController.m 代码片段。

关于iphone - UITabBars 无法识别导航栏和导航栏隐藏 TableView Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19460786/

相关文章:

iphone - 从 iPhone 中的 PhoneGap 发送短信?

iphone - NSLocale 总是返回 en_US

android - 从 Rails 应用程序向 iOS、Android、BlackBerry 发送通知

ios - 如何向下转换可以是多种类型的对象?

objective-c - Xcode Objective-C 错误需要一些帮助 :)

objective-c - 使用Facebook ID,Facebook SDK,iOS进行身份验证

iphone - View 将消失未触发

iphone - 在 ARC 上显示 UIKeyboard 时内存泄漏

ios - 使用 AFNetworking 解析 JSON 文件

ios - 我怎么知道用户单击了静态TableView中的节标题