Объект UIScrollView, переданный по ссылке, но не возвращаемый - PullRequest
0 голосов
/ 05 мая 2011

У меня есть сценарий, где у меня есть:

  • UINavigationController с UIViewController (mainVC) с UIView (mainView), содержащим UIScrollView (scrollView)
  • полноэкранная кнопка в mainView, где после нажатия на нее выдвигается новый UIViewController (fullScreenVC), с объектом scrollView, переданным по ссылке (сохраненным с атрибутами nonatomic и assign). fullScreenVC правильно показывает объект scrollView.
  • после закрытия fullScreenVC, NSNotification отправляется на mainVC. Здесь кроется проблема ...

Когда fullScreenVC удален, scrollView больше не отображается в mainVC. Я могу сказать, что он все еще существует, распечатав scrollView в журналах во время уведомления.

Я бы подумал, что, отправляя и сохраняя scrollView по ссылке, mainVC все равно сохранит его. Я также попытался отправить scrollView обратно в mainVC, если он был удален, но это ничего не дало.

Единственный способ решить эту проблему - добавить scrollView обратно в mainVC на этапе уведомления. Есть ли что-то особенное, что я должен сделать при отправке объектов UIScrollView (или, в более общем случае, объектов UIKit)? Или я где-то сделал глупость?

1 Ответ

1 голос
/ 11 августа 2011

Нет передачи по ссылке.В Objective-C у нас есть указатели на объекты, и эти указатели назначаются и передаются (а не сами объекты).

В любом случае, это не имеет отношения к данному вопросу.Ваша проблема в том, что в UIKit представление может иметь только одно суперпредставление (это древовидная иерархия).Когда вы добавляете представление как подпредставление в другое представление, оно автоматически удаляется из предыдущего суперпредставления, если оно было.См. Документацию для addSubview: здесь: https://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instm/UIView/addSubview:

Вам действительно нужно показывать один и тот же вид прокрутки на двух разных экранах?Это кажется странным.У вас должно быть два разных вида прокрутки;или вы можете убедиться, что добавили его обратно в «mainView» после того, как сделали с другим.

...