在iPhone中的标签栏控制器
我在我的应用程序中添加了两个选项卡,使用这些选项卡加载两个视图控制器
- Tab1:首页
- 表2:collections
所以我写下面的代码来实现这一点
在应用程序代表
AppDelegate.h
@class ViewController,FavViewController; @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @property (strong, nonatomic) ViewController *viewController; @property (strong, nonatomic) FavViewController *favViewController; @property (strong, nonatomic) UITabBarController *tabBarController; @end
AppDelegate.m
@implementation AppDelegate @synthesize window = _window; @synthesize viewController; @synthesize favViewController; @synthesize tabBarController; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; baseTabBarController = [[UITabBarController alloc]init]; baseTabBarController.delegate=self; viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; UINavigationController *homeView = [[UINavigationController alloc]initWithRootViewController:viewController]; favViewController = [[FavViewController alloc] initWithNibName:@"FavViewController" bundle:nil]; favViewController.title = @"My Favourite"; UINavigationController *favouriteView = [[UINavigationController alloc] initWithRootViewController:favViewController]; NSArray *controllers = [NSArray arrayWithObjects:homeView,favouriteView, nil]; baseTabBarController.viewControllers = controllers; [self.window addSubview:baseTabBarController.view]; [self.window makeKeyAndVisible]; return YES; } - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)selectedViewController { if (tabBarController.selectedIndex == 0) { }else if (tabBarController.selectedIndex == 1) { [(FavViewController *)[(UINavigationController*)selectedViewController topViewController] getData]; }else if (tabBarController.selectedIndex == 2) { NSLog(@"2"); } }
这里是我得到的结果屏幕
所以我在这里遇到麻烦
如果我切换到下一个屏幕,我的第一个选项卡不会加载第一个屏幕(主屏幕),而只是停留在当前屏幕上。
让我试一试
在我的应用程序中有四个屏幕让我们说A,B,C,D
我为A和C屏幕添加了选项卡,这些选项卡可以在整个应用程序(全屏)中使用。
现在,如果我将启动应用程序,并进入A – > B-> C – > D并按Home Tab(A),它不会加载屏幕A,而是保持当前屏幕
但好东西是如果我做与另一个选项卡C(我最喜欢)相同的过程加载正确的屏幕。
编辑:我已经实施didSelectViewController方法@sanjitbuild议我,但我不能区分,这个时间点击哪个标签?
我会很感激! 如果有人能指引我正确的方向
使用Tabbar委托并使用uiviewcontroller的参数实例调用poptorootviewcontroller方法。 希望它可以为你工作。 尝试下面的代码
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { UINavigationController *navController = (UINavigationController*)tabBarController.selectedViewController; [navController popToRootViewControllerAnimated:YES]; }
replace代码
[viewController setTabBarItem:tab1]; [favViewController setTabBarItem:tab2];
同
[[tabbarController tabBar] setItems:[NSArray arrayWithObjects:tab1,tab2, nil]];
应该解决。
Viewcontroller.h @property(nonatomic, retain) UITabBarItem *item1; @property(nonatomic, retain) UITabBarItem *item2; @property(nonatomic, retain) UITabBarItem *item3; @property(nonatomic, retain) UITabBarItem *item4; @property(nonatomic, retain) IBOutlet UITabBar *tabBar; Viewcontroller.m @synthesize item1,item2,item3,item4,tabBar; - (void)viewDidLoad { item1 = [[UITabBarItem alloc] initWithTitle:@"Home" image:[UIImage imageNamed:@"home.png"] tag:0]; item2 = [[UITabBarItem alloc] initWithTitle:@"My Lists" image:[UIImage imageNamed:@"mylist"] tag:1]; item3 = [[UITabBarItem alloc] initWithTitle:@"Search" image:[UIImage imageNamed:@"search.png"] tag:2]; item4 = [[UITabBarItem alloc] initWithTitle:@"Settings" image:[UIImage imageNamed:@"setting.png"] tag:3]; NSArray *items = [NSArray arrayWithObjects:item1,item2,item3,item4, nil]; [tabBar setItems:items animated:NO]; [tabBar setSelectedItem:[tabBar.items objectAtIndex:2]]; tabBar.delegate=self; [self.view addSubview:tabBar ]; } /****Function Call******/ - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { if(item.tag == 0) { Newsfeeds *obj = [[Newsfeeds alloc]initWithNibName:@"Newsfeeds" bundle:Nil]; [self.navigationController pushViewController:obj animated:NO]; } else if(item.tag == 1) { MyLists *obj = [[MyLists alloc]initWithNibName:@"MyLists" bundle:Nil]; [self.navigationController pushViewController:obj animated:NO]; } else if(item.tag == 3) { Settings *obj = [[Settings alloc]initWithNibName:@"Settings" bundle:Nil]; [self.navigationController pushViewController:obj animated:NO]; } }
- 错误:iPhone私人框架“没有这样的文件或目录”
- SLCOmviewviewcontroller微博分享警报问题
- 如何在swift 3中根据数组做选中勾选?
- iOS objective-C:在浮点上使用模来从“英尺”获得“英寸”
- 在iOS8.3上显示警报视图时,不必要地触发iOS键盘通知
- 具有自动布局的UIView不会增加UIScrollView内部的高度
- GoogleMapsSDK:体系结构x86_64的未定义符号
- 应用程序在iOS 6上崩溃:找不到符号:___sync_fetch_and_add_4
- MFMessageComposeViewController iOS7 addAttachmentData:typeIdentifier:文件名:不工作