2015-10-26 3 views
0

Я использовал [self.view viewWithTag], чтобы ссылаться на объекты внутри UIViewController. Затем я переместил конкретный подзаголовок в новый UIViewController, а затем добавил его в качестве контроллера детского представления и добавил представление в качестве подсмотра. Однако теперь я не могу использовать viewWithTag в контроллере дочернего представления для доступа к различным объектам. Каждый раз объект, полученный с использованием viewWithTag, равен нулю.viewWithTag всегда возвращает nil в контроллере детского представления

Не думаю, что использую viewWithTag неправильно, поскольку он отлично работал, прежде чем переместить этот вид на новый контроллер. Одним из решений является создание свойств для каждого из представлений, на которые я ссылаюсь, используя viewWithTag, но я не думаю, что это хороший способ. Есть ли лучшее решение? Почему это происходит?

Edit, в соответствии с просьбой:

Вот как я добавить контроллер представления ребенка:

self.runeTable = [RuneTableViewController new]; 
[self addChildViewController:self.runeTable]; 
self.runeTable.view.frame = CGRectMake(screenshotWidth + 32, navBarHeight, self.view.frame.size.width-screenshotWidth-32.0, self.view.frame.size.height-navBarHeight); 
[self.view addSubview:self.runeTable.view]; 

Вот код для создания кнопки:

UIButton *updateButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
updateButton.tag = 5; 
[updateButton setTitleColor:HIGHLIGHT_COLOR forState:UIControlStateNormal]; 
[updateButton.titleLabel setFont:FONT_MED_LARGE_BOLD]; 
[updateButton setTitle:@"Update" forState:UIControlStateNormal]; 
updateButton.frame = CGRectMake(283, 280-60, 100, 60); 
[detailInnerView addSubview:updateButton]; 

И здесь в каком-либо другом методе, я пытаюсь восстановить и добавить цель к этой кнопке:

UIButton *updateButton = (UIButton *)[self.view viewWithTag:5]; 
[updateButton addTarget:self action:@selector(updateCurrentDictionaryWithRuneInfo) forControlEvents:UIControlEventTouchUpInside]; 

Когда я добавил точку останова и po updateButton, он вернулся как ноль. То же самое произошло с другими элементами пользовательского интерфейса в контроллере представления, которые я также попытался извлечь таким образом.

+0

Некоторый код, показывающий, где и как вы добавляете контроллер дочернего представления, и как вы пытаетесь получить представление, которое вы хотите, было бы полезно. –

+0

Конечно, добавлю. – Charles

+0

Что такое 'self' в этом контексте' UIButton * updateButton = (UIButton *) [self.view viewWithTag: 5]; '? –

ответ

0

Я понял. updateButton добавлен в другой UIView, который добавляется в родительский контроллер представления. Таким образом, для извлечения updateButton я должен использовать [self.parentViewController.view viewwithTag:5] вместо [self.view viewWithTag:5].

Смежные вопросы