如何修改TabBarController项目的标题和图标?可以直接在Interface Builder中使用吗?
我有一个标签栏控制器,它添加了四个导航控制器.导航控制器在选项卡栏控制器中显示为选项卡栏项目.现在我想在标签栏中添加第五个按钮,它不会打开另一个视图,但会触发一些自定义代码.我想在单击该标签栏项目时显示重叠的"共享菜单",无论用户在哪四个页面中.我怎样才能做到这一点?
objective-c uitabbarcontroller uitabbaritem tabbarcontroller ios
这在Xcode 3中非常简单.但是我完全迷失在Xcode 4中.*看起来根本就没有使用IB.并且所有TabBarController代码都在代码中.
问题:如何在使用TabBarController模板时将NavigationBarController添加到Xcode生成的默认代码中?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
Run Code Online (Sandbox Code Playgroud) 这是一个奇怪的错误,可能只是我所知道的Xcode中的一个问题.我有一个标签栏控制器,其中第一个视图是一个UITableView(显然)有许多单元格.当您选择一个单元格时,我在MainStoryboard上设置了一个segue以转到详细视图控制器.我希望在进入详细视图时隐藏标签栏,因此我进入故事板,选择我的详细视图,然后在编辑器屏幕中单击"隐藏底部栏",以"模拟度量标准"开头.
一切都运行得很好,除了当我点击一个单元格时,UITableView屏幕顶部闪烁黑条,向下放下tableview单元格(好像单元格在底部的标签栏下面落下),就在之前屏幕突然移动到详细视图.效果根本没有害处,但它非常令人不安,我想让它顺利出来.
我发现的唯一修复是在故事板上取消选中"Hiding Bottom Bar when Pushed"选项.这确实摆脱了那个黑条闪光,但当我进入细节视图当然标签栏停留在屏幕上,这是我不想要的.
有任何想法吗?
为了完整起见,我继续前进并跑了
[self.navigationController setToolbarHidden:YES animated: YES];
Run Code Online (Sandbox Code Playgroud)
在详细视图控制器的viewWillAppear方法(甚至尝试使用故事板选项打开和关闭),但没有区别.工具栏确实隐藏得很好,但我仍然在顶部有那条黑线.太奇怪了.
我在我的项目中使用Tab Bar Controller,其中FirstViewController具有Mapbox地图视图,而SecondViewController具有按下按钮,按下时将贴图层添加到地图视图.这是我尝试过的.它会产生错误***在SecondViewController.m中使用未声明的标识符'_mapView'
//FirstViewController.h
#import <UIKit/UIKit.h>
#import <MapBox/MapBox.h>
#import "SecondViewController.h"
#import "SecondViewController.m"
@interface FirstViewController : UIViewController
@property (strong, nonatomic) IBOutlet RMMapView *mapView;
@end
//SecondViewController.h
#import <UIKit/UIKit.h>
#import <MapBox/MapBox.h>
#import "FirstViewController.h"
#import "FirstViewController.m"
@interface SecondViewController : UIViewController
- (IBAction)stationingLayerButton:(id)sender;
@end
//SecondViewController.m
- (IBAction)stationingLayerButton:(id)sender {
RMMBTilesSource *stationingMap = [[RMMBTilesSource alloc] initWithTileSetURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Stationing20" ofType:@"mbtiles"]]];
[_mapView addTileSource:stationingMap atIndex:2];
}
}
Run Code Online (Sandbox Code Playgroud)
地图调用是正确的,因为我在仅使用一个视图控制器的项目上测试了它.现在我正在Tab Bar Controller上尝试它,我得到了这个错误.
我的问题是
1.如何在FirstViewController中获取mapView以响应SecondViewController中的调用?这可以吗?我已经导入了类文件,认为这会打开两者之间的通信,但我坚持这个错误.
(这是我第一次在StackOverflow上提问,如有问题请见谅)
我的问题归结为无法正确恢复UITabBarController. 这是一个基于选项卡的应用程序,我没有使用故事板。
我选择了状态恢复。我已经ViewController在各自的init方法中为我的所有自定义s 提供了唯一的恢复标识符和恢复类。
至于UITabBarController,我在创建时为其提供了唯一的恢复标识符。因为我没有给它一个恢复类,所以我在app委托中实现了以下代码:
- (UIViewController *)application:(UIApplication *)application viewControllerWithRestorationIdentifierPath:(NSArray *)identifierComponents coder:(NSCoder *)coder
{
UITabBarController *vc = [[UITabBarController alloc] init];
vc.restorationIdentifier = [identifierComponents lastObject];
if ([identifierComponents count] == 1) {
self.window.rootViewController = vc;
}
return vc;
}
Run Code Online (Sandbox Code Playgroud)
我在其他app中也用过同样的方法来恢复NavigationControllers的状态,一切都很顺利。但是,当我使用 为这个应用程序执行此操作时TabBarController,应用程序启动时为空TabBarController(TabBarController已恢复,但不会恢复它的子视图控制器)。
这对我来说并不是一个巨大的冲击,我想只是本质上UITabBarControllers 不会保留对其子视图控制器的引用,而不是用于状态恢复的选定选项卡索引。但是,尽管在网上搜索了很多小时,但我无法获得有关如何保留 a TabBarController(without storyboard)状态的任何说明。任何有关如何做到这一点的帮助将不胜感激。
再次,如果我没有提供足够的细节或不够清楚,我很抱歉。请让我知道您在答案中需要什么,我会提供。我知道我没有提供很多代码,但我真的只需要有关如何在没有故事板的情况下保留基于 Tab 的应用程序状态的说明。它不需要根据我的具体情况量身定制;我将能够自己应用一般过程。
谢谢!
我使用tabbarcontroller作为根视图控制器.不幸的是,使用新的故事板功能,很难在应用程序加载上划分视图控制器 - 登录页面.
我使用以下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
[tabBarController performSegueWithIdentifier:@"loginPage" sender:self];
Run Code Online (Sandbox Code Playgroud)
segue设置正确.我进入了一个选项卡视图控制器并制作了一个IBAction并成功进行了搜索.提前致谢.
我有一个像这样的UITabBarController:
/*SomeTabBarController.h*/
@interface SomeTabBarController: UITabBarController
@end
Run Code Online (Sandbox Code Playgroud)
在SomeTabBarController.m中我想更改viewDidLoad上的活动选项卡
-(void)viewDidLoad
{
[super viewDidLoad];
self.tabBarController.selectedIndex = 2;
}
Run Code Online (Sandbox Code Playgroud)
但是,tabBarController是零.我错过了什么?我有一个导航控制器和segue推送到标签栏控制器...
谢谢
首先,让我说我是一个绝对的初学者,所以请原谅我,如果这是一个愚蠢的问题要问.我只想补充一点,我花了几个小时/几天试图弄清楚如何解决这个问题 - 包括对stackoverflow的广泛搜索(也许答案在某处,我现在不知道究竟要搜索什么:) .
但是,让我们继续:我对Xcode故事板项目有一个小问题.基本上我的项目看起来像这样:
导航控制器 - >查看控制器0 - >标签栏控制器 - <查看控制器1,视图控制器2,视图控制器3.
当用户在视图控制器0中按下"按钮#2"时,我希望他/她直接跳到"查看控制器2".
这有可能吗,如果是的话,应该使用什么代码,并且我应该把它放在哪里.
希望有人在那里帮助新手:)
此致,Ulrik
在iPad上基于TabBar的应用程序上,有没有办法在"FullScreen"中呈现模式?
我有一个仅限LANDTSAPE的应用程序(如果这有所不同)和我想要以模态方式呈现的项目我想要全屏显示,填写整个屏幕只是为了澄清.我可以在"PageSheet"中显示它,并且"FormSheet"没问题,在模态视图笔尖上进行了几次按钮调整后,但是一旦我尝试"FullScreen",背景变为白色(TabBar仍在那里),并且如果我重试按下按钮(不重新启动模拟器),它将不会响应.
按钮所在的视图用于显示模态视图是CountryViewController.m并具有以下操作:
-(IBAction) showNewModal:(id)sender {
modalContent.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
modalContent.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentModalViewController:modalContent animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
我已经意识到,没有TabBar,这段代码工作正常.我已经花了好几个小时来添加到这段代码甚至是AppDelegate.h和.m文件,但到目前为止,它要么没有响应(奇怪的是没有显示错误)或前面提到的空格.
tabbarcontroller ×10
ios ×6
ios5 ×2
iphone ×2
objective-c ×2
tabbar ×2
ios7 ×1
modal-dialog ×1
state ×1
storyboard ×1
swift ×1
uitabbar ×1
uitabbaritem ×1
uitableview ×1
views ×1
xcode ×1