【问题标题】:Present UIViewController呈现 UIViewController
【发布时间】:2012-03-28 10:07:16
【问题描述】:

我知道这非常愚蠢。

我有一个扫描二维码的视图控制器。我在AppDelegate (didFinishLaunchingWithOptions) 中创建它,并且我还将我的AppDelegate 设置为视图控制器的委托,当他完成扫描代码时它将调用一个方法。在那个方法中,我在AppDelegate 中实现了我想呈现一个UINavigationController。问题是它没有显示我的导航控制器。这是我的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    reader=[ZBarReaderViewController new];
    reader.readerDelegate=self;
    reader.supportedOrientationsMask=ZBarOrientationMaskAll;
    ZBarImageScanner *scanner=reader.scanner;
    [scanner setSymbology:ZBAR_I25 config:ZBAR_CFG_ENABLE to:0]; 


   [self.window addSubview:reader.view];
   [self.window makeKeyAndVisible];
   return YES;
}

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    RootViewController *rootViewController=[[RootViewController alloc] init ];  //create root view controller

    UINavigationController *navigationController=[[UINavigationController alloc] initWithRootViewController:rootViewController];  // create and init navigation controller with viewController
    [navigationController setValue:[[GradientBar alloc] init] forKey:@"navigationBar"];

    rootViewController.title=@"mTLU";
    [reader presentModalViewController:navigationController animated:NO];

}

【问题讨论】:

  • 可以看看[ZBarReaderViewController new]的实现吗?
  • 是我从网上下载的一个库。他们有一个示例项目,但他们使用根控制器向读者展示,然后同一个根控制器也是委托。就我而言,我希望这个 ZBarViewController 成为根控制器,并且在它完成扫描后我想呈现一个新的视图控制器。
  • 好像你忘了在didFinishLaunchingWithOptions:中设置self.window.rootViewController

标签: iphone ios xcode uiviewcontroller


【解决方案1】:

好像你忘了在didFinishLaunchingWithOptions: 中设置self.window.rootViewController

试试:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
   // Override point for customization after application launch.
   self.reader=[ZBarReaderViewController new];
   self.reader.readerDelegate=self;
   self.reader.supportedOrientationsMask=ZBarOrientationMaskAll;
   ZBarImageScanner *scanner=reader.scanner;
   [scanner setSymbology:ZBAR_I25 config:ZBAR_CFG_ENABLE to:0]; 

   self.window.rootViewController = self.reader;

   [self.window addSubview:reader.view];
   [self.window makeKeyAndVisible];
   return YES;
}

此代码假定 readerpropertyAppDelegate。如果只有iVar,你应该省略self.(或考虑将其设为property)。

【讨论】:

  • 我已经添加了这个 [reader presentViewController:navigationController animated:YES completion:nil];
  • 问题是在我展示的导航控制器中,我正在连接到一个已关闭的服务器,因此我的应用程序冻结了。感谢您的宝贵时间。
  • 在您的代码中我看不到self.window.rootViewController 的设置。也不清楚您希望哪个viewController 成为rootViewController。如果它是您在didFinishPickingMediaWithInfo: 中创建的那个,您应该在didFinishLaunchingWithOptions: 中创建它并将其设置为根。然后在 didAppear 中展示你的 ZBarReaderViewController...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多