中央パネルのコンテンツを変更するための UITableView を含む左側のメニューでJASidePanelsを使用するプロジェクトがあります。
カスタム 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];
}
...
}
}
これは、ストーリーボードを使用せず、xib ファイルでインターフェイスを作成するときに、Menu Controller の UITableView のすべての行を選択解除してフォーマットすることで、必要に応じて機能します。
ストーリーボードを使用するときに問題が発生します。別のコントローラー (SidePanelController) によってストーリーボード内からインスタンス化されたときに、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 をプログラムで取得することは可能ですか?
前もって感謝します
灰