Почему мой UITableView не может загрузить detailView? - loadView и viewDidLoad не называются
У меня есть вопрос, касающийся того, почему мой UITableView не загружает detailView... Я делал это раньше с помощью конструктора интерфейса, но сейчас я просто пытаюсь сделать это программно, чисто.
В моем tableView.h:
@property (strong, nonatomic) RLCASearchDetailViewControllerViewController *searchDetailViewController;
В моей таблице View.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" );
}
Как видно выше, когда я реализовал несколько отладочных отпечатков... Он делает то, что должен теоретически, но по какой-то причине не загружает представления. Это проявляется в графическом интерфейсе в том, что при щелчке ячейки таблицы ничего не происходит, когда представление должно перейти в подпредставление.
Что я делаю неправильно? Пожалуйста, помогите... Это сводило меня с ума, и я некоторое время рылся в сети в надежде получить ответы.
Большое спасибо - я действительно ценю это!;)
С уважением, Петр.
2 ответа
Если вы не используете перо, измените эту строку кода:
self.searchDetailViewController = [[RLCASearchDetailViewControllerViewController alloc] initWithNibName:@"" bundle:nil];
к
self.searchDetailViewController = [[RLCASearchDetailViewControllerViewController alloc] init];
Надеюсь, поможет!
Ваше табличное представление не встроено в контроллер навигации, поэтому оно не может выдвинуть новый контроллер представления.
Поскольку контроллер подробного представления никогда не отображается на экране, он никогда не беспокоит загрузку своего представления, поэтому вы ничего не видите из методов loadView или viewDidLoad.
Вы не показываете, как вы настроили начальный контроллер представления для своего приложения, но это должен быть контроллер навигации с вашим контроллером представления таблицы в качестве корневого контроллера представления.
Если вы новичок, раскадровки гораздо лучше использовать, чем пытаться делать все это в коде. Есть несколько преимуществ и много недостатков, позволяющих избежать построения интерфейса.