iOS環境で複数のフレームワークを連携させようとしている途中で、ネイティブメソッドを使用してナビゲートしようとしています。 (RN)。iOS Reactネイティブコードを使用してネイティブナビゲーションが動作しない
rootViewController
を公開し、トリガーされたメソッドでUIViewController
を変更する複数の方法を試した後、メソッドが呼び出されているにもかかわらず、View Controllerを変更できません。
私は以下で試したコードを残し、私がしようとしていることをうまく説明してくれます。
免責事項:私はOBJ-CとiOSの開発と完全にnoobのと初心者だ - 私は
を行くようにこれは私のAppDelegate
実装です学習:
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[super applicationDidFinishLaunching:application];
NSURL *jsCodeLocation;
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"SomethingMobile"
initialProperties:nil
launchOptions:launchOptions];
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
UIViewController *rootViewController = [[UIViewController alloc] init];
rootViewController.view = rootView;
self.navigationController = [[UINavigationController alloc] initWithRootViewController: rootViewController];
[self.window setRootViewController:self.navigationController];
//--- style the UINavigationController
self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
self.navigationController.navigationBar.topItem.title = @"Home";
return YES;
}
-(void) changeView {
// SimpleViewController is a valid UIViewController that I tested separately and it works
[self.navigationController pushViewController:[[SimpleViewController alloc] init] animated:YES];
self.navigationController.navigationBar.topItem.title = @"OF";
printf("Got here");
}
@end
それから私は持っていますRNとネイティブコードの間の橋渡し役であるクラス:
@implementation OFStarter
// The React Native bridge needs to know our module
RCT_EXPORT_MODULE()
- (NSDictionary *)constantsToExport {
return @{@"greeting": @"Welcome to native"};
}
RCT_EXPORT_METHOD(squareMe:(int)number:(RCTResponseSenderBlock)callback) {
AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[delegate changeView]; // this is getting called when I press a button in the RN view
callback(@[[NSNull null], [NSNumber numberWithInt:(number*number)]]);
}
@end
私には何らかの理由で未知のものがありますが、 changeView
メソッドが呼び出されても何も起こっていません。私の理解から、pushViewController
はUINavigationController
を使ってビューを変更するときに呼び出すメソッドです。
changeView
と同じコード行を使用してdidFinishLaunchingWithOptions
メソッドでビューコントローラを変更したい場合は、完全に動作します。
[self.navigationController pushViewController:[[SimpleViewController alloc] init] animated:YES];
また、RNボタンを押したときにchangeView
が常に呼び出されることを言及したいと思います。
この件に関するお手伝いをいたします。私はしばらくこのことに執着していました。私は明らかに何かが欠けているかもしれないと確信しています。ありがとう!