[英]Calling method in parent UIViewController, after adding by addSubview
我有一個UIViewController,它正在創建另一個視圖控制器,並將其視圖添加為子視圖:
在父UIViewController中:
SlateMoreView* subView = [[SlateMoreView alloc] initWithNibName:@"SlateMoreView" bundle:nil];
[self.view addSubview:subView.view];
然后,我需要在父視圖的子視圖中調用方法。
當我使用[self.navigationController pushViewController:subView animation:YES]添加子UIViewController時,我已經看到了如何執行此操作,因為我可以使用這種代碼找到父對象:
在子視圖UIViewController中:
NSArray* viewControllerArray = [self.navigationController viewControllers]
int parentViewControllerIndex = [viewControllerArray count] - 2;
SlateView* slateView = [viewControllerArray objectAtIndex:parentViewControllerIndex];
...然后我可以向它發送消息。 但是由於我是使用addSubView手動添加子視圖的,因此無法執行此操作。
誰能想到我該如何與父級UIViewController對話?
謝謝!
UIView
的superview
屬性似乎正是您要尋找的。
另外,除非非常有意地構建自定義包含視圖控制器,否則您可能不想嵌套UIViewController
的視圖。 參見http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/
您可能要考慮是否可以使用NSNotifications解決您的問題。 您可以在感興趣的聽眾(您的超級視圖)需要了解的事件發生時從子視圖發布通知。 當超級視圖收到通知時,它可以運行您想要的任何代碼。 一直以來,子視圖永遠不需要了解父視圖。
這是使您的類減少相互依賴的一種方法。
您也可以使用委托作為另一種選擇。
將視圖作為子視圖添加到視圖層次結構時,將其放入響應者鏈中。 您可以沿着響應者鏈向上到達視圖控制器,因為由UIViewController
控制的UIView
將UIViewController
作為其nextResponder
。
id object = theSubview;
do {
object = [object nextResponder];
} while ( ![object isMemberOfClass:[YourViewController class]] );
// object has the view controller you need.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.