20

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

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

}
4

7 回答 7

51

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

    ImagesViewController *ivc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyIdentifier"];
    ivc.label = self.label.text;
    [self.navigationController pushViewController:ivc animated:YES];
于 2013-07-25T16:19:24.873 回答
2

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

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

如果你有一个 xib 分配它像

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

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

于 2013-07-25T15:29:12.580 回答
2

Xcode 7.3 和 Swift 2.2

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

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

于 2016-06-02T06:16:14.837 回答
1

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

于 2015-02-25T09:03:39.933 回答
1

我有一个很好的:

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

我根本没有使用/实现 UINavigationController

class TMDetailBlogViewController: UINavigationController {
  //code goes here
}

class TMDetailBlogViewController: UIViewController {
  //code goes here
}
于 2016-10-21T20:54:28.603 回答
0

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

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

在您的自定义 UIViewController 上。

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

于 2013-07-25T15:18:32.903 回答
0

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

以这种方式推动控制器-

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

在 NextController-

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

}

于 2019-01-02T20:01:03.063 回答