viewWithTag всегда возвращает nil в контроллере дочернего представления

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

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

Изменить в соответствии с запросом:

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

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, он вернулся как ноль. То же самое произошло с другими элементами пользовательского интерфейса в контроллере представления, которые я также пытался получить таким же образом.


person Charles    schedule 26.10.2015    source источник
comment
Некоторый код, показывающий, где и как вы добавляете дочерний контроллер представления, и как вы пытаетесь получить желаемое представление, был бы полезен.   -  person Scott Berrevoets    schedule 27.10.2015
comment
Конечно, я добавлю это.   -  person Charles    schedule 27.10.2015
comment
Что такое self в данном контексте UIButton *updateButton = (UIButton *)[self.view viewWithTag:5];?   -  person oyvindhauge    schedule 27.10.2015
comment
po self возвращает экземпляр дочернего контроллера представления, RuneTableViewController.   -  person Charles    schedule 27.10.2015


Ответы (1)


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

person Charles    schedule 26.10.2015