простой случай вставки Subview: ниже Subview не работает - PullRequest
4 голосов
/ 27 июля 2011

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

Вот ViewDidLoad моего текущего (тот, который сверху - ViewControllerTop для примера):

- (void)viewDidLoad
{
[super viewDidLoad];
viewControllerBottom = [[ViewControllerBottom alloc] init];
[self.view insertSubview:viewControllerBottom.view belowSubview:self.view];

}

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

- (IBAction)goToBottomView:(id)sender { 
[self.view.superview removeFromSuperview];

}

кто-нибудь видит что-то не так с этим? Спасибо за помощь!

Кстати - хотя это глупо, я также пытался использовать insertSubview: aboveSubview, но он тоже не работает.

Ответы [ 2 ]

12 голосов
/ 27 июля 2011

Я думаю, что в вашем коде есть фундаментальная ошибка.Вы делаете:

[self.view insertSubview:viewControllerBottom.view belowSubview:self.view]

, поэтому представление, которое вы передаете в параметре belowSubview:, должно быть подпредставлением self.view, а self.view - это не!

insertSubview:belowSubview:будет работать нормально, если вы используете его с подпредставлениями объекта-получателя, как и предполагалось.

1 голос
/ 03 мая 2013

Другая фундаментальная ошибка в приведенном выше коде заключается в том, что в этом новом представлении не определен кадр. Вместо вызова init, который инициализирует представление в null rect, вы должны использовать правильный фрейм. Что-то вроде self.frame должно работать, чтобы охватить весь вид.

И кстати, вы не можете сделать оба addSubview и затем вызвать insertSubView. Глядя на то, чего вы хотите достичь, вы должны вставить это новое представление в родительский.

viewControllerBottom = [[ViewControllerBottom alloc] initWithFrame:self.frame];
[self.view.superView insertSubview:viewControllerBottom.view belowSubview:self.view];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...