[ios]更改标题为 viewController 到 tabbarController

发布时间: 2017/3/21 23:15:49
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我的应用程序的第一个视图是 UICollectionView 和单元格到 TabBarController 与五个视图推但没出现的问题当我更改每个视图的标题。所以我要把这些五 viewController 不同的标题。

CollectionView.m是︰

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"cell";
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];

    productName *data = [self.productarray objectAtIndex:indexPath.item];

    UIImageView *imageView = (UIImageView *)[cell viewWithTag:100];
    imageView.image = data.productImage;

    UILabel *title2 = (UILabel *)[cell viewWithTag:200];
    title2.text = data.productNames;

    return cell;
}

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
    ProductsViewController *detail = [[ProductsViewController alloc]init];
    //[self.view pushViewController:detail animated:YES];
    detail.productNumber = indexPath.item;
    //NSLog(@"%d", indexPath.item);
}

解决方法 1:

您需要创建的 tabBarController。 这是真的在 didSelect 方法中。...

UITabBarController * tabBarController = [[UITabBarController alloc] init];

UIViewController * firstController = [[MYCustomViewController alloc] init];
UITabBarItem * firstItem = [[UITabBarItem alloc] initWithTitle:@"First" image:[UIImage imageNamed: @"FirstImage"] tag:1];
firstController.tabBarItem = firstItem;

//Now create second through fifth VCs here

tabBarController.viewControllers =  @[firstController, secondController, thirdController, fourthController, fifthController];
[self.navigationController pushViewController:tabBarController animated:YES];

另一方面,它被认为是不好的形式 (由苹果公司至少) 把标签栏里面的 navcontroller,不是认为甚至有可能到放里面导航栏导航栏。

(在下面的评论) 以后的进一步思考︰

相反我会建议将"现在"你从你的原始之间导航,tabBarController,然后每个选项卡栏内 viewControllers 将是 navController。在你的 didSelect,这将现在看起来像︰

UITabBarController * tabBarController = [[UITabBarController alloc] init];

UINavigationController *firstController = [[UINavigationController alloc] initWithRootViewController:[[MYCustomViewController1 alloc] init];
UITabBarItem * firstItem = [[UITabBarItem alloc] initWithTitle:@"First" image:[UIImage imageNamed: @"FirstImage"] tag:1];
firstController.tabBarItem = firstItem;

//Now create second through fifth Nav VCs here

tabBarController.viewControllers =  @[firstController, secondController, thirdController, fourthController, fifthController];

tabBarController.modalPresentationStyle = UIModalPresentationFullScreen;
tabBarController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

[self presentViewController:tabBarController animated:YES completion:nil];

对于一个在 VC 中界面生成器创建一个视图 (说 MYView1) (编辑 > 新 > 文件 > ios > 用户界面 > 视图 > 和更改文件的所有者类型为 VC 类的名称)。然后,而不是只是 [[MYCustomViewController1 alloc] init] 使用[[MYCustomViewController1 alloc] initWithNibName:@"MYView1" bundle:nil]

当你想要回到从 tabBar 之间导航,从任何嵌入式控制器,创建按钮和链接及其操作运行这段代码︰

[self.tabBarController dismissViewController:self.tabBarController animated:YES completion:nil]

最后,如果你想要做这一切都是 IB,只是提请您与相关的五个 subcontrollers tabcontroller。然后有你 collectionViewController (应该不是在导航控制器内),并创建从您的 collectionViewCell 到 tabController 的界限。界限类型设置为modal。然后单击项目应直接启动 tabController。若要设置 tabController 的数量信息,请添加此方法︰

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender   {
    NSIndexPath *indexPath = [self.collectionView indexPathForSelectedRow];
   segue.destinationViewController.productNumber = indexPath.item;
}
官方微信
官方QQ群
31647020