【问题标题】:Why can't my UITableView load the detailView? - loadView and viewDidLoad are not called为什么我的 UITableView 不能加载 detailView? - 不调用 loadView 和 viewDidLoad
【发布时间】:2012-06-13 03:08:55
【问题描述】:

我有一个关于为什么我的 UITableView 不会加载 detailView 的问题... 我以前用界面构建器做过,但现在我只是想纯粹地以编程方式来做。

在我的 tableView.h 中:

@property (strong, nonatomic) RLCASearchDetailViewControllerViewController *searchDetailViewController;

在我的 tableView.m 中:

@synthesize searchDetailViewController = _searchDetailViewController;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    if (!self.searchDetailViewController) 
    {

        self.searchDetailViewController = [[RLCASearchDetailViewControllerViewController alloc] initWithNibName:@"" bundle:nil];

    }

    SearchItem *item = [ content objectAtIndex:indexPath.row ];

    [self.navigationController pushViewController:self.searchDetailViewController animated:YES];

    self.searchDetailViewController.detailItem = item;

}

顺便说一句,我试过将 initWithNibName: 值设为 nil,空字符串如上,甚至 @"RLCASearchDetailViewControllerViewController"。没有任何效果...

在我的 RLCASearchDetailViewControllerViewController.h 中:

@interface RLCASearchDetailViewControllerViewController : UIViewController
{

    SearchItem *detailItem;

}

@property (strong, nonatomic) id detailItem;

@end

在我的 RLCASearchDetailViewControllerViewController.m 中:

@synthesize detailItem = _detailItem;

- (void)setDetailItem:(SearchItem*)newDetailItem
{
    NSLog( @"GETS HERE" );
    if (_detailItem != newDetailItem) {
        _detailItem = newDetailItem;

        // Update the view.
        [self configureView];
    }
}

- (void)configureView
{
    // Update the user interface for the detail item.

    if (self.detailItem) 
    {

       NSLog( @"GETS HERE" );

    }

}

- (void)loadView
{
    [super loadView];
    // If you create your views manually, you MUST override this method and use it to create your views.
    // If you use Interface Builder to create your views, then you must NOT override this method.

    NSLog( @"DOES NOT GET HERE" );

}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    NSLog( @"DOES NOT GET HERE" );
}

如上所见,当我实现了一些调试打印时......它在理论上做了它应该做的事情,但由于某种原因没有加载视图。当单击表格单元格时,当视图应更改为子视图时,这会在 GUI 中体现出来。

我做错了什么?请帮助...这让我发疯了,我已经在互联网上翻找了一段时间,希望得到答案。

非常感谢 - 我真的很感激! ;)

真诚地, 彼得。

【问题讨论】:

  • 你的 didselectedrowatindexpath 方法调用了吗?
  • 如果您纯粹以编程方式执行此操作,那么首先检查您的 didSelectRowAtIndexPath 是否被调用?如果它没有被调用,那么 Your_tableView.delegate = self;Your_tableView.datasource = self; 我不是在讽刺,但这是程序员从 IB 转向纯编程时最常见的忘记。
  • 在推送详细视图时记录 self.navigationcontroller。如果为 nil,它将产生您所看到的症状。
  • 是的,先生! NSLog(@"NAV: %@", self.navigationController);产生:资产净值:(空)。我能做些什么?看来快要解决了。谢谢! :)

标签: iphone objective-c uitableview uiviewcontroller detailview


【解决方案1】:

如果您不使用笔尖,请更改这行代码:

self.searchDetailViewController = [[RLCASearchDetailViewControllerViewController alloc] initWithNibName:@"" bundle:nil];

self.searchDetailViewController = [[RLCASearchDetailViewControllerViewController alloc] init];

希望对你有帮助!

【讨论】:

  • 您好 skram,感谢您的快速回答!不幸的是,它仍然是一样的。我在想这可能与笔尖有关,但不知道该怎么做......
  • 没问题,您最初表示您没有使用界面生成器,是吗?
  • 您是否使用 IB 或以编程方式创建了 RLCASearchDetailViewControllerViewController?
  • Nuzhat Zari,我以编程方式创建了它。
【解决方案2】:

您的表格视图没有嵌入到导航控制器中,因此它无法推送新的视图控制器。

由于详细视图控制器永远不会显示在屏幕上,因此它永远不会打扰加载其视图,这就是您从 loadView 或 viewDidLoad 方法中看不到任何内容的原因。

您没有展示如何为您的应用设置初始视图控制器,但它应该是一个导航控制器,您的表视图控制器作为根视图控制器。

如果您是初学者,使用故事板要比尝试全部用代码完成要好得多。避免使用界面构建器几乎没有好处,也有很多缺点。

【讨论】:

  • 嗯...现在我很困惑,说实话我应该怎么做...我做 searchNavController.viewControllers = [NSArray arrayWithObject:searchMasterViewController];但这与表视图完全不同的 UIViewController...虽然 searchMasterViewController 是调用表视图的地方。
  • 首先如何将表格视图放在屏幕上?
  • 我将 self.tableView (其中 self 是表视图控制器)添加到父 UIViewController 的视图作为子视图。
猜你喜欢
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 2010-10-13
相关资源
最近更新 更多