![](/img/trans.png)
[英]How to set properties on initial view controller (created in Storyboard) from AppDelegate?
[英]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.