GVKun编程网logo

为什么我从React Native NativeModule开始时UIViewcontroller不会显示在屏幕上?

26

如果您对为什么我从ReactNativeNativeModule开始时UIViewcontroller不会显示在屏幕上?感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解为什么我从ReactNat

如果您对为什么我从React Native NativeModule开始时UIViewcontroller不会显示在屏幕上?感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解为什么我从React Native NativeModule开始时UIViewcontroller不会显示在屏幕上?的各种细节,此外还有关于ios – React-Native Hybrid App:嵌入RCTRootView的Pop UIViewController、ios – 与具有两个UINavigationController的rootViewController共享相同的UIViewController、ios – 在Objective-C中将UINavigationController添加到我的segue.destinationViewController、ios – 在UINavigationController中,topViewController,visibleViewController,renderedViewController之间有什么区别?的实用技巧。

本文目录一览:

为什么我从React Native NativeModule开始时UIViewcontroller不会显示在屏幕上?

为什么我从React Native NativeModule开始时UIViewcontroller不会显示在屏幕上?

如何解决为什么我从React Native NativeModule开始时UIViewcontroller不会显示在屏幕上??

我有问题。当我从ios中的React本机代码中调用UIViewController时,它在第一个图像中显示为新视图,但未在故事板上显示为我设计的样子。请任何解决方案?

这是第一张图片, https://i.stack.imgur.com/4RNkP.jpg

这是情节提要图像,

https://i.stack.imgur.com/fo171.png

这是我的ViewController.h,

using namespace cv;

@interface ViewController : UIViewController<CvVideoCameraDelegate>
{
  IBOutlet UIImageView* imageView;
  IBOutlet UIButton* button;
  
}

@property (nonatomic,strong) CvVideoCamera* videoCamera;

@end

  

HERE is the ViewController.m file,#import <opencv2/videoio/cap_ios.h>

#import "ViewController.h"


using namespace cv;


@interface ViewController(){
  CvVideoCamera* videoCamera;
}

@end

@implementation ViewController


- (void)viewDidLoad
{
  [super viewDidLoad];
  // Do any additional setup after loading the view,typically from a nib.
  self.videoCamera = [[CvVideoCamera alloc] initWithParentView:imageView];
  self.videoCamera.delegate = self;
  self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionFront;
  self.videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPreset352x288;
  self.videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationPortrait;
  self.videoCamera.defaultFPS = 30;
  self.videoCamera.grayscaleMode = NO;
}

-(void)viewDidAppear:(BOOL)animated
{
  [self.videoCamera start];
}


#pragma mark - Protocol CvVideoCameraDelegate
#ifdef __cplusplus
- (void)processImage:(Mat&)image;
{
  // Do some OpenCV stuff with the image
  Mat image_copy;
  
  cvtColor(image,image_copy,COLOR_BGR2GRAY);
  // invert image
  bitwise_not(image_copy,image_copy);
  //Convert BGR to BGRA (three channel to four channel)
  Mat bgr;
  cvtColor(image_copy,bgr,COLOR_GRAY2BGR);
  cvtColor(bgr,image,COLOR_BGR2BGRA);
}
#endif

#pragma mark - UI Actions
- (IBAction)actionStart:(id)sender;
{
  [self.videoCamera start];
}
@end


HERE IS THE CODE TO CALL UIVIEWCONTRLLER,RCT_EXPORT_METHOD(ShowCamera) {
  dispatch_async(dispatch_get_main_queue(),^{

    ViewController *controller ;
    controller = [[ViewController alloc] init];
    UIViewController *rooterController;
    rooterController = [UIApplication sharedApplication].keyWindow.rootViewController;
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:controller];
    AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    [rooterController presentViewController:nav animated:YES completion:nil];
    
  });
}
    


 

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

ios – React-Native Hybrid App:嵌入RCTRootView的Pop UIViewController

ios – React-Native Hybrid App:嵌入RCTRootView的Pop UIViewController

我正在使用Objective-C / Swift编写的现有iOS应用程序中集成组件.

作为我的应用程序的根视图控制器,我使用UINavigationController.

在我的应用程序的多个视图控制器之一中,我有一个按钮,可以在导航控制器中推送包含以下代码的视图控制器:

@objc class ReactNativeViewController: UIViewController {
  override func viewDidLoad() {
    let jsCodeLocation = NSURL(string: "http://localhost:8081/index.ios.bundle?platform=ios&dev=true")

    let contactsView = RCTRootView(bundleURL: jsCodeLocation,moduleName: "MainComponent",initialProperties: nil,launchOptions: nil)

    self.view.addSubview(contactsView)
    contactsView.frame = self.view.bounds;
  }
}

MainComponent返回一个管理多个React-Native组件的Navigator:

return (
  <Navigator
    initialRoute={initialRoute}
    renderScene={(route,navigator) => {
      if (route.component) {
        return <route.component navigator={navigator} {...route.passprops} />;
      }
    }}
    navigationBar={
      <Navigator.NavigationBar
        routeMapper={this.NavigationBarRouteMapper}
        style={styles.navBar}
      />
    }
  />
);

该工作流程正常.我唯一需要的是当主React-Native组件上的按钮Back被命中时,从我的UINavigationController弹出ReactNativeViewController的方法.

我试过以下但没有运气:

>使用单个方法popLastViewController创建一个本机模块,弹出从UINavigationController显示的显示的UIViewController:

@implementation RNNavigationControllerBridge

RCT_EXPORT_MODULE()

RCT_EXPORT_METHOD(popLastViewController) {
  UINavigationController *navigationController = (UINavigationController *)[[[[UIApplication sharedApplication] delegate] window] rootViewController];

  [navigationController popViewControllerAnimated:NO];
}

@end

>按下后退按钮时调用上面的方法:

onPress={() => {
  if (index === 0) {
    NativeViewsManager.popLastViewController();
  } else {
    navigator.pop();
  }
}}

但这不起作用.

有什么建议吗?

解决方法

问题解决了!

RCT_EXPORT_METHOD(popLastViewController) {
  dispatch_async(dispatch_get_main_queue(),^{
    UINavigationController *navigationController = (UINavigationController *)[[[[UIApplication sharedApplication] delegate] window] rootViewController];

    [navigationController popViewControllerAnimated:YES];
  });
}

ios – 与具有两个UINavigationController的rootViewController共享相同的UIViewController

ios – 与具有两个UINavigationController的rootViewController共享相同的UIViewController

更新:我已经决定与我的问题走一条不同的路线.
而不是直接使用相同的UIViewController,而是使用两个设置为rootViewController的vanilla UIViewController.在他们的loadView方法中,他们调用[storyboard instantiateViewControllerWithIdentifier:]来获取前一个UIViewController,并将其视图设置为控制器的视图.这可能是首选方法,因为我需要设置几个变量和代表.

我有一个UIStoryBoard与UITabBarController作为入口点与两个UINavigationControllers连接.每个共享一个共同的UIViewController作为其根视图控制器.当应用程序启动时,第一个UITabBarItem被选中,视图按预期方式加载.但是,当我选择第二个UITabBarItem时,相同的视图是不可见的.我看到带有黑色背景的UINavigationBar.我使用Storyboard界面做错了事情,还是需要通过每个UINavigationController的方法手动实例化UIViewController – 例如loadView?

解决方法

奇怪的是,这是一个没有其他人问的问题.据我所知,不可能共享rootViewController,我认为是一个错误,因为当您检查故事板上的连接时,您可以看到视图控制器连接到两个导航控制器.我认为这是故事板中的一个缺陷,因为重复的viewController和重新应用所有的连接是非常容易出错的,并使故事板过于复杂.

我看到你的解决方案的问题.像这样的解决方法让我有疑问,如果iOS中的当前故事板功能已准备好创建应用程序.我认为故事板有一个概念上的问题,苹果公司需要决定一个故事板上的一个viewController是否代表一个实例,或者它是否只代表该类,现在它不一致,因为您可以看到多个变量实际上可以指向相同的viewController,但实际上每个segue都有自己的实例,为什么还没有跟rootViewController连接?我不知道.

就像您的解决方案一样,请注意Apple的文档中的以下内容:

“重要视图控制器是其视图的唯一所有者及其创建的任何子视图,它负责创建这些视图,并在适当的时候放弃其所有权,包括在低内存条件下以及视图控制器本身被释放时如果您使用故事板或nib文件来存储视图对象,则视图控制器要求它们时,每个视图控制器对象会自动获取这些视图的自己的副本,但是如果手动创建视图,则不应使用具有多个视图控制器的相同视图对象“.

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html

ios – 在Objective-C中将UINavigationController添加到我的segue.destinationViewController

ios – 在Objective-C中将UINavigationController添加到我的segue.destinationViewController

我有一个基于SplitViewController的应用程序,它调用其他人UIViewController,通过详细信息部分中的替换显示它们…

我发送参数,信息,对象,一切正常,使用MasterViewController中的segues

但是我的一些UIViewControllers通过使用Segues与其他UIViewControllers交互,因此,为了使它们正常工作,我需要将它们嵌入到UINavigationController中

我的问题是:

当正在执行segue时,如何将UINavigationController添加到我的segue.destinationViewController:

>从masterViewController传递我的参数
>允许我的UIViewControllers通过使用Segues与其他ViewControllers交互

我想在一个解决方案中:
– 通过在MasterViewController中创建自定义委托或协议来解决参数问题
-UINavigationControllers问题是通过在其中嵌入我的UIViewControllers在故事板中以设计模式添加它们

但我需要设置我的destinationViewController UISplitViewController的委托,用于显示以纵向模式显示MasterViewController的按钮…

如果我在prepareForSegue方法中设置它,让UINavigationControllers保持我的ViewControllers,我将把UISplitViewController的委托设置为UINavigationController而不是

在此先感谢您的帮助

编辑:这是我找到解决它的方式:

首先我给一个按钮分配了一个IBAction,如果我的设备不是iPad,它会做正常的…

- (IBAction)openExecutives:(id)sender {
    if ([[[UIDevice currentDevice]model] hasPrefix:@"iPad"]) {
        UsersListVC    *rightViewController    = [self.storyboard instantiateViewControllerWithIdentifier:@"UsersListVC"];
        [self showSplitViewController:rightViewController];
    }
    else
        [self performSegueWithIdentifier:@"viewSceneExecutives" sender:self];
}

这是我用自定义细节创建SplitView的功能…

-(void)showSplitViewController:(id)rightViewController{

    UIStoryboard *mainStoryboard        = [UIStoryboard storyboardWithName:@"iPad2" bundle: nil];

    UINavigationController  *leftNavController;
    UINavigationController  *rightNavController;

    MainMenuVC      *leftViewController     = [mainStoryboard instantiateViewControllerWithIdentifier:@"MainMenuVC"];

    leftNavController                   = [[UINavigationController alloc] initWithRootViewController:leftViewController];
    rightNavController                  = [[UINavigationController alloc] initWithRootViewController:rightViewController];

    leftNavController.toolbarHidden     = FALSE;
    rightNavController.toolbarHidden    = FALSE;


    UISplitViewController   *splitViewController    = [[UISplitViewController alloc] init];

    splitViewController.viewControllers             = [NSArray arrayWithObjects:leftNavController,rightNavController,nil];

    splitViewController.delegate        = rightViewController;

    self.view.window.rootViewController = splitViewController;
}

我所做的就是通过创建一个需要参数的函数(UIViewController)从重新开始重绘splitViewController

解决方法

您应该在嵌入在导航控制器中的IB中设置控制器.当您想从主视图控制器访问内容控制器时,您只需使用导航控制器属性topViewController来获取引用.所以在prepareForSegue:中,你可以这样做:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
      UINavigationController *dest = (UINavigationController *)segue.destinationViewController;
      self.detailViewController = (DetailViewController *)dest.topViewController;
      self.splitViewController.delegate = self.detailController;
}

ios – 在UINavigationController中,topViewController,visibleViewController,renderedViewController之间有什么区别?

ios – 在UINavigationController中,topViewController,visibleViewController,renderedViewController之间有什么区别?

UINavigationController有3个控制器,所有的声音都非常类似于我:topViewController,visibleViewController和presentedViewController.

您在哪些情况下使用这些控制器?

解决方法

presentViewController是屏幕上呈现的当前模态. topViewController是导航堆栈顶部的视图控制器(参见viewControllers()方法),visibleViewController是屏幕上当前显示的视图控制器(可以是控制器,模态,UINavigationController,UITabbarController等).

关于为什么我从React Native NativeModule开始时UIViewcontroller不会显示在屏幕上?的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ios – React-Native Hybrid App:嵌入RCTRootView的Pop UIViewController、ios – 与具有两个UINavigationController的rootViewController共享相同的UIViewController、ios – 在Objective-C中将UINavigationController添加到我的segue.destinationViewController、ios – 在UINavigationController中,topViewController,visibleViewController,renderedViewController之间有什么区别?等相关知识的信息别忘了在本站进行查找喔。

本文标签: