无法让辅助 UITableViewController 在 UITabBarController 中显示
Posted
技术标签:
【中文标题】无法让辅助 UITableViewController 在 UITabBarController 中显示【英文标题】:Can't get Secondary UITableViewController to display inside a UITabBarController 【发布时间】:2010-04-09 09:13:00 【问题描述】:我以编程方式创建了一个 UITabBarController
,它像这样加载到我的 App Delegate 中:
- (void)applicationDidFinishLaunching:(UIApplication *)application
tabBarController = [[UITabBarController alloc] init];
myTableViewController = [[MyTableViewController alloc] init];
UINavigationController *tableNavController = [[[UINavigationController alloc] initWithRootViewController:myTableViewController] autorelease];
myTableViewController.title = @"Tab 1";
[myTableViewController release];
mySecondTableViewController = [[MySecondTableViewController alloc] init];
UINavigationController *table2NavController = [[[UINavigationController alloc] initWithRootViewController:mySecondTableViewController] autorelease];
mySecondTableViewController.title = @"Tab 2";
[mySecondTableViewController release];
tabBarController.viewControllers = [NSArray arrayWithObjects:tableNavController, table2NavController, nil];
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
现在我遇到的问题是我可以毫无问题地进入视图,但是当我尝试单击表视图中的任何项目时,我无法让辅助表视图出现在任何选项卡中。选项卡工作得很好,只是辅助视图。我在 myTableViewController 中使用下面的代码在选择特定行时运行(代码到达 HELP 行并崩溃)...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
NSUInteger row = [indexPath row];
// this gets the correct view controller from a list of controllers
SecondaryViewController *svc = [self.controllers objectAtIndex:row];
/*** HELP NEEDED WITH THIS LINE ***/
[self.navigationController pushViewController:svc animated:YES];
简单地说,我正在尝试将视图切换到新的视图控制器,同时保持选项卡可用并使用导航来回移动(就像在 iTunes 应用程序中一样)。
【问题讨论】:
【参考方案1】:简单地说,我是在创建控制器数组,self.controllers,添加对象,然后释放对象。
如果在释放数组之前不释放对象,它似乎工作没有问题。
【讨论】:
Uuups - 我没有注意到你回答了你的问题。你的问题解决了吗?【参考方案2】:您的问题中没有包含如何初始化 self.controllers 数组。
我怀疑这个数组没有被初始化的 SecondaryViewController 对象填充。
编辑(添加适用于我的代码示例):
.h 文件:
@interface FirstLevelViewController : UITableViewController
NSArray *controllers;
@property (nonatomic, retain) NSArray *controllers;
@end
和 .m 文件:
@implementation FirstLevelViewController
@synthesize controllers;
- (void)viewDidLoad
self.title = @"First Level";
NSMutableArray *array = [[NSMutableArray alloc] init];
// Disclosure Button
DisclosureButtonController *disclosureButtonController =
[[DisclosureButtonController alloc]
initWithStyle:UITableViewStylePlain];
disclosureButtonController.title = @"Disclosure Buttons";
disclosureButtonController.rowImage = [UIImage
imageNamed:@"disclosureButtonControllerIcon.png"];
[array addObject:disclosureButtonController];
[disclosureButtonController release];
// deleted further adds to array ...
self.controllers = array;
[array release];
[super viewDidLoad];
【讨论】:
这些是初始化的 SecondaryViewController 对象... ...在 MyTableViewController viewDidLoad 我有: SecondaryViewController *svc = [[SecondaryViewController alloc] initWithStyle:UITableViewStylePlain]; svc.title = @"svc"; [数组添加对象:svc]; [svc 发布]; self.controllers = 数组;当我从 self.controllers 数组中获取控制器时,会返回这个对象。该值不是 nil (因此它被创建)并且标题设置正确。仅供参考 SecondaryViewController 子类 UITableViewController 和自我委托 嗯 ...似乎我们面前有同一本书(开始 iPhone 3 开发);-) 我无法在您的代码中发现任何错误。编译器是否有任何错误消息? 我刚刚尝试通过直接创建 svc 对象来运行代码(而不是将其从数组中拉出)并且它可以工作......所以从数组不太正确 我刚刚检查了属于本书的源代码,是否有任何更正或勘误。他们完全按照您描述的方式进行操作,并且在我的模拟器中编译和运行良好。在失败期间,您是否在调试器窗口中收到任何消息? 对不起...不得不出去一会儿。嗯......很高兴我朝着正确的方向前进,只是真的很困惑为什么它不能开箱即用!直接创建对象而不是从数组中获取对象似乎可行。我会努力解决这个问题,看看我能不能解决它。以上是关于无法让辅助 UITableViewController 在 UITabBarController 中显示的主要内容,如果未能解决你的问题,请参考以下文章