簡體   English   中英

通過addSubview添加后,父UIViewController中的調用方法

[英]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對話?

謝謝!

UIViewsuperview屬性似乎正是您要尋找的。

另外,除非非常有意地構建自定義包含視圖控制器,否則您可能不想嵌套UIViewController的視圖。 參見http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/

您可能要考慮是否可以使用NSNotifications解決您的問題。 您可以在感興趣的聽眾(您的超級視圖)需要了解的事件發生時從子視圖發布通知。 當超級視圖收到通知時,它可以運行您想要的任何代碼。 一直以來,子視圖永遠不需要了解父視圖。

這是使您的類減少相互依賴的一種方法。

您也可以使用委托作為另一種選擇。

將視圖作為子視圖添加到視圖層次結構時,將其放入響應者鏈中。 您可以沿着響應者鏈向上到達視圖控制器,因為由UIViewController控制的UIViewUIViewController作為其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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM