【问题标题】:Push View Controller, Black Screen推送视图控制器,黑屏
【发布时间】:2013-07-25 15:12:38
【问题描述】:

我正在推送到一个新的视图控制器并将一些数据传递给它。当我运行应用程序时,我可以按下按钮并推送到新视图,但屏幕全黑。任何帮助表示赞赏。

- (IBAction)button:(id)sender {

    NSString *firstField = self.field.text;
    NSString *secondField = self.field2.text;

    self.resultsArray = [[NSArray alloc] initWithObjects:firstField, secondField, nil];

    NSUInteger randomResult = arc4random_uniform(self.resultsArray.count);
    self.label.text = [self.resultsArray objectAtIndex:randomResult];

    ImagesViewController *ivc = [[ImagesViewController alloc] init];
    ivc.label = self.label.text;
    [self.navigationController pushViewController:ivc animated:YES];

}

【问题讨论】:

  • 这是什么上下文?你是从情节提要分配视图控制器吗?一个xib文件?什么都没有,只是随机的?

标签: ios uiviewcontroller


【解决方案1】:

当您使用故事板时,并且想要在代码中推送视图控制器(而不是使用 segue),您需要给控制器一个标识符,并像这样创建它:

    ImagesViewController *ivc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyIdentifier"];
    ivc.label = self.label.text;
    [self.navigationController pushViewController:ivc animated:YES];

【讨论】:

  • 可以使用[UIStoryboard storyboardWithName:@"Main" bundle: nil]; 检索情节提要对象,其中“Main”是情节提要的文件名,不带扩展名(也可以是“Main_iPhone”或“Main_iPad”)。
  • @BrianWhite,是的,但如果调用控制器与新控制器在同一个故事板中,则使用 self.storyboard 会更短。
  • 当然。我试图从没有该属性的 AppDelegate 访问它,因此不得不进行更多搜索。我想我会附加我学到的东西,这样其他人可能会在尝试做同样的事情时避免额外的工作。
  • 任何尝试过这个并且有“预期']'”警告的人,在“@MyIdentifier”之前放一个':',所以它会保持这样:instantiateViewControllerWithIdentifier:@"MyIdentifier"
  • @RodrigoVenancio,感谢您发现这个错字。我已经更正了帖子。
【解决方案2】:

您正在推送的视图控制器没有设置任何框架尺寸。始终建议为对象调用指定的 init。对于视图控制器,指定的 init 方法是

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle

如果你有一个 xib 像这样分配它

ImagesViewController *ivc = [[ImagesViewController alloc] initWithNibName:<your xib> bundle:[NSBundle mainbundle];

如果您使用自定义视图,请分配框架尺寸并将其添加为子视图

【讨论】:

    【解决方案3】:

    Xcode 7.3 和 Swift 2.2

    在我的例子中,我在情节提要中进行了更改并将其设置为 TabBarController,并相应地将控制器的类从 UIViewController 更改为 UITabBarController。经过一些调整,这个改变并不有利,我取消了所有的改变并得到了一个黑屏,因为我忘记改变控制器的类。我把它改回 UIViewController,它又开始工作了。

    所以请检查您是否犯了同样的错误。黑屏出现是因为情节提要有一个类(UIView/UITabBar/UITableView 控制器),但在代码中不一样。

    【讨论】:

      【解决方案4】:

      如果您以某种方式在情节提要中的一个子视图与控制器视图之间建立了不正确的连接,也会发生这种情况。检查每个子视图中的引用插座是否正确。

      【讨论】:

        【解决方案5】:

        我得到了一个很好的:

        确保您在尝试呈现的 viewController 的顶部实现了正确的 Super 类、委托等。即

        我根本没有使用/实现 UINavigationController

        class TMDetailBlogViewController: UINavigationController {
          //code goes here
        }
        

        之后

        class TMDetailBlogViewController: UIViewController {
          //code goes here
        }
        

        【讨论】:

          【解决方案6】:

          通常,您通过调用转换到另一个视图控制器:

          initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
          

          在您的自定义 UIViewController 上。

          如果您不使用 xib 文件,那么您正在做的事情可能没问题。您是否在 ImagesViewController 的构造函数中动态创建 UI 元素?

          【讨论】:

          • 我没有 xib。我正在从情节提要创建 UI 元素。
          • 在这种情况下,您可能希望使用此方法来处理视图转换:- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender
          【解决方案7】:

          我尝试不使用情节提要,只是它使用的默认屏幕是黑色的。我将背景颜色更改为白色,它起作用了。

          以这种方式推动控制器-

          NextController *nextController = [[NextController alloc]init]; [self.navigationController pushViewController:nextController Animation:YES];

          在 NextController-

          (void)viewDidLoad{
          [self.view setBackgroundColor:[UIColor whiteColor]];
          

          }

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-22
            • 2010-12-11
            • 1970-01-01
            • 2014-01-11
            相关资源
            最近更新 更多