gpt4 book ai didi

ios - 将 viewController 的标题更改为 tabbarController

转载 作者:行者123 更新时间:2023-11-29 12:51:28 25 4
gpt4 key购买 nike

我的应用程序第一个 View 是 UICollectionView,我将 Cell 推送到具有五个 View 的 TabBarController,但是当我更改每个 View 的标题时没有出现问题。所以我需要为这五个 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);
}

最佳答案

您需要创建 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];

另一方面,将标签栏放在导航 Controller 中被认为是不好的形式(至少 Apple 认为),我认为甚至不可能将导航栏放在导航栏中。

进一步的想法(在下面的评论之后):

我建议的是从您的原始 collectionView 中“呈现”您的 tabBarController,然后标签栏内的每个 viewController 都将是一个 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];

在 Interface Builder 中为 VC 创建 View (例如 MYView1)(Edit>New>File>ios>UserInterface>View> 并将 File 的 OwnerType 更改为您的 VC 类的名称)。然后不仅仅是 [[MYCustomViewController1 alloc] init] 使用 [[MYCustomViewController1 alloc] initWithNibName:@"MYView1"bundle:nil]

当您想从 tabBar 返回到 collectionView 时,从任何嵌入式 Controller 创建一个按钮并链接其操作以运行此代码:

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

最后,如果您想在 IB 中执行所有这些操作,只需绘制带有相关五个子 Controller 的 tabcontroller。然后让你的 collectionViewController(它不应该在导航 Controller 中),并创建一个从你的 collectionViewCell 到 tabController 的 segue。将 segue 的类型设置为模态。然后单击一个项目应该直接启动 tabController。要为 tabController 设置 productNumber 信息,请添加此方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender   {
NSIndexPath *indexPath = [self.collectionView indexPathForSelectedRow];
segue.destinationViewController.productNumber = indexPath.item;
}

关于ios - 将 viewController 的标题更改为 tabbarController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22336808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com