Вызов метода в родительском UIViewController, после добавления с помощью addSubview - PullRequest
1 голос
/ 14 мая 2011

У меня есть UIViewController, который создает другой контроллер представления и добавляет его представление в качестве подпредставления:

В родительском UIViewController:

SlateMoreView* subView = [[SlateMoreView alloc] initWithNibName:@"SlateMoreView" bundle:nil];
[self.view addSubview:subView.view];

Затем мне нужно вызвать метод из подпредставления в родительском представлении.

Я видел, как это сделать, когда я добавляю sub UIViewController, используя [self.navigationController pushViewController: subView animated: YES], потому что я могу найти родителя, используя такой код:

В дополнительном представлении UIViewController:

NSArray* viewControllerArray = [self.navigationController viewControllers]
int parentViewControllerIndex = [viewControllerArray count] - 2;
SlateView* slateView = [viewControllerArray objectAtIndex:parentViewControllerIndex];

... и тогда я могу отправлять ему сообщения. Но так как я добавил вспомогательное представление вручную с помощью addSubView, я не могу этого сделать.

Кто-нибудь может подумать, как я могу общаться с моим родителем UIViewController?

Спасибо!

Ответы [ 3 ]

1 голос
/ 14 мая 2011

UIView s имеет свойство superview, которое, по-видимому, является тем, что вы ищете.

Кроме того, вы, вероятно, не захотите вложить представление UIViewController таким образом, если только вы неочень намеренно создать пользовательский контроллер представления содержимого.Смотри http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/

0 голосов
/ 14 мая 2011

Когда вы добавляете свое представление как подпредставление в иерархию представления, вы помещаете его в цепочку респондента.Вы можете пройти вверх по цепочке респондента, чтобы достичь контроллера представления как UIView, управляемый UIViewController, с UIViewController в качестве nextResponder.

id object = theSubview;
do {
    object = [object nextResponder];
} while ( ![object isMemberOfClass:[YourViewController class]] );

// object has the view controller you need.
0 голосов
/ 14 мая 2011

Возможно, вы захотите решить, можно ли решить вашу проблему с помощью NSNotifications. Вы можете опубликовать уведомление от своего подпредставления, когда произойдет событие, о котором заинтересованные слушатели (ваше суперпредставление) должны знать. Когда суперпредставление получает уведомление, оно может запустить любой код, который вы пожелаете. Тем временем подпредставлению никогда не нужно знать о суперпредставлении.

Это один из способов сделать ваши классы менее зависимыми друг от друга.

Вы также можете использовать делегирование в качестве другого варианта.

...