簡體   English   中英

呈現和嵌入式視圖控制器之間的交互

[英]interactions between presented and embedded view controllers

  • VC1將VC2嵌入到容器視圖中。 VC2是表VC。

  • 單擊VC2中的單元格將推動VC3。

  • VC3將VC4嵌入到容器視圖中。

視覺的 如何從VC4.m中獲得對VC1引用

我嘗試了self.parentViewController.presentingViewController.parentViewControllerself.parentViewController.presentingViewController但它們似乎沒有用。

但是后來,我決定看看當我使用委托存儲對VC1的引用時是否可行,但對於VC1上的所有公共屬性,我仍然為空。 在這種情況下,VC1不會在內存中嗎? 如果沒有,為什么不呢? 如果是這樣,為什么其(strong)屬性為null?

編輯:我也剛剛通過NSLogs發現,VC4中的viewDidLoad在VC2中的didSelectRowAtIndexPath完成執行和設置委托引用之前已執行,這可能解釋了為什么這種方法行不通。 如何確保僅在didSelectRowAtIndexPath中所有其他行的完成時才推送下一個VC? 而且無論如何,在選擇行之前,VC1上已經設置了其他公共屬性(不為null)(我剛剛在VC2的didSelectRow中使用NSLog進行了驗證),並且當我嘗試執行以下操作時它們會變為null通過任何方法通過VC4訪問它們。

(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here. Create and push another view controller.
/*
 <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
 // ...
 // Pass the selected object to the new view controller.
 [self.navigationController pushViewController:detailViewController animated:YES];
 */

// set reference to selected convo. it is stored in ConversationsParentVC public property
self.conversationsParentVC.selectedConvo = self.conversationsParentVC.conversationsArray[indexPath.row];

// temp
AppDelegate *delegate = getAppDelegate;
delegate.activeVC = self.conversationsParentVC;
ConversationsParentVC *convosParentVC = (ConversationsParentVC*)delegate.activeVC;
NSLog(@"boop %@", delegate.activeVC);
NSLog(@"beep %i", convosParentVC.conversationsArray.count);
}

堆棧跟蹤

當您從表視圖單元格設置推送segue時,該segue在調用tableView:didSelectRowAtIndexPath:方法之前觸發。 您需要通過源視圖控制器的prepareForSegue:sender:方法將信息傳遞到目標視圖控制器。

另外,您可能會發現此答案很有幫助。

您可能還會發現,知道prepareForSegue:sender:中的sender參數是表視圖單元格,並且表視圖的indexPathForSelectedRow已設置為單元格的索引路徑,這很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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