簡體   English   中英

從AppDelegate訪問在情節提要的tableview中創建的視圖?

[英]Accessing a view created in storyboard's tableview from AppDelegate?

我有一個使用JASidePanels的項目,其左側菜單包含一個UITableView來更改中央面板的內容。

因為我希望能夠通過自定義URL方案深度鏈接到控制器,所以我將視圖切換功能作為handleOpenURL:函數的一部分移到了AppDelegate.m文件中。 這樣,我更新了菜單控制器的didSelectRowAtIndexPath:函數來調用自定義URL,如下所示:

- (void)tableView:(UITableView *)aTableView 
  didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSInteger index = indexPath.row;

    NSDictionary *item = self.menu[index];

    NSURL *myURL = [NSURL URLWithString:item[@"url"]];

    [[UIApplication sharedApplication] openURL:myURL];
}

使用.xibs而不是情節提要時,AppDelegate的handleOpenURL:函數如下所示:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

    if ([[url host] isEqualToString:@"goto"]) {

        for (int i = 0; i < [self.leftMenuViewController.tableView
          numberOfRowsInSection:0]; i++) {

            [self.leftMenuViewController.tableView 
              deselectRowAtIndexPath:[NSIndexPath indexPathForRow:i
              inSection:0] animated:NO];

            UITableViewCell *deselectedCell = [self.leftMenuViewController.tableView
              cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i
              inSection:0]];

            deselectedCell.backgroundColor = [UIColor clearColor];
        }

    ...

    }
}

這可以按需工作,在不使用情節提要板時在菜單控制器上取消選擇UITableView中的所有行並設置其格式,並在xib文件中創建界面。

我的問題來自使用情節提要。 當另一個控制器(SidePanelController)從情節提要中實例化(MenuTableController)時,如何從AppDelegate內的MenuViewController訪問(UITableView *)tableView?

我在didFinishLaunchingWithOptions:函數中使用以下代碼設置情節提要:

self.storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:[NSBundle mainBundle]];
self.viewController = [storyboard instantiateInitialViewController];

self.window.rootViewController = self.viewController;

所以我需要訪問已經實例化的MenuViewController實例,而不是創建控制器的新實例。 我試圖通過以下方式訪問tableView:

SidePanelController *panelController = (SidePanelController *)self.window.rootViewController;
UIViewController *menuViewController = (MenuViewController *)panelController.leftPanel;
UITableView *menuTableView = (UITableView *)menuViewController;

但運氣不佳。 是否可以從故事板中實例化的視圖中以編程方式檢索UITableView?

提前致謝

對於在使用JASidePanels進行側欄導航時嘗試從AppDelegate訪問Storyboard視圖的UITableView時遇到類似問題的任何人,我都實現了上述我自己的問題的解決方案。

在您的JASidePanelController.h文件中,更新以下行:

// set the panels
@property (nonatomic, strong) UIViewController *leftPanel;   // optional

對於您創建的左側菜單視圖控制器,在我的情況下:

// set the panels
@property (nonatomic, strong) MenuViewController *leftPanel;   // optional

並在JASidePanelController.m文件中,更新以下方法聲明:

- (void)setLeftPanel:(UIViewController *)leftPanel {

- (void)setLeftPanel:(MenuViewController *)leftPanel {

通過執行上述操作,它將允許您使用AppDelegate中的以下語法與左側菜單的tableView進行交互:

SidePanelController *panelController = (SidePanelController *)self.window.rootViewController;

[panelController.leftPanel.tableView reloadData];

暫無
暫無

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

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