推视图控制器,黑屏

时间:2013-07-25 15:12:38

标签: ios uiviewcontroller

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

- (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];

}

7 个答案:

答案 0 :(得分:49)

当您使用故事板时,如果想要在代码中推送视图控制器(而不是使用segue),则需要为控制器提供标识符,并按以下方式创建:

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

答案 1 :(得分:2)

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

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

如果你有一个xib分配它

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

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

答案 2 :(得分:2)

Xcode 7.3和Swift 2.2

在我的情况下,我在storyboard中进行了更改并使其成为TabBarController,并相应地将控制器的类从UIViewController更改为UITabBarController。经过一些调整后,这个改变并不是有利的,我做了所有的改变并得到了一个黑屏然后因为我忘了改变控制器的类。我把它改回UIViewController,它又开始工作了。

所以检查你是否犯了同样的错误。黑屏是因为故事板有一个类(UIView / UITabBar / UITableView控制器)但在代码中不一样。

答案 3 :(得分:1)

如果您在故事板中的某个子视图与控制器视图之间的连接不正确,也会发生这种情况。检查每个子视图中的引用插座是否正确。

答案 4 :(得分:1)

我有一个好人:

确保在正在尝试呈现的viewController的顶部实现正确的超类,委托等。即。

我根本没有使用/实现UINavigationController

class TMDetailBlogViewController: UINavigationController {
  //code goes here
}

class TMDetailBlogViewController: UIViewController {
  //code goes here
}

答案 5 :(得分:0)

通常,您通过调用:

转换到另一个视图控制器
initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

在您的自定义UIViewController上。

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

答案 6 :(得分:0)

我尝试不使用情节提要,而它使用的默认屏幕只是黑色。我将背景色更改为白色,并且可以正常工作。

以这种方式推动控制器-

NextController * nextController = [[NextController alloc] init];     [self.navigationController pushViewController:nextController动画:是];

在NextController中-

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

}