2013-07-25 9 views
19

私は新しいビューコントローラを押して、いくつかのデータを渡しています。アプリケーションを実行すると、ボタンを押して新しいビューを押すことができますが、画面は完全に黒です。どんな助けもありがとうございます。プッシュビューコントローラ、ブラック画面

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

をカスタムの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]; 

} 
+0

後、すべての

class TMDetailBlogViewController: UINavigationController { //code goes here } 

でUINavigationControllerを実装する/使用していませんでした。このコンテキストは何ですか?あなたはストーリーボードからView Controllerを割り当てていますか? xibファイル?全く無作為に何も無作為に? –

答えて

0

通常、あなたは呼び出すことで別のビューコントローラに移行します。

xibファイルを使用していない場合は、何がしているかは問題ありません。 ImagesViewControllerのコンストラクタ内にUIエレメントを動的に作成していますか?

+0

私はxibを持っていません。私はストーリーボードからUI要素を作成しています。 –

+0

その場合、おそらくこの方法を使ってビューの遷移を処理したいと思うでしょう: - (void)performSegueWithIdentifier:(NSString *)識別子送信者:(id)送信者 –

2

押しているビューコントローラにフレームディメンションが設定されていません。オブジェクトの指定されたinitを呼び出すことをおすすめします。あなたはXIBは、カスタムビューを使用している場合

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

のようにそれを割り当てるフレーム寸法を割り当て、サブビューとして追加している場合、ビューコントローラの場合、指定されたinitメソッドは

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

ある

47

ストーリーボードを使用していて、SegueではなくコードでView Controllerをプッシュしたい場合は、コントローラに識別子を与え、次のように作成する必要があります。

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

ストーリーボードオブジェクトは '[UIStoryboard storyboardWithName: @ "Main" bundle:nil]; '" Main "は、拡張子のないストーリーボードのファイル名です(" Main_iPhone "または" Main_iPad "でもかまいません)。 –

+0

@BrianWhite、trueですが、呼び出し側コントローラが新しいコントローラと同じストーリーボードにある場合は、self.storyboardを使用するほうが簡単です。 – rdelmar

+0

私はそのプロパティを持たないAppDelegateからアクセスしようとしていたので、さらに検索する必要がありました。私は同じことをしようとしていた場合、他の人が余分な仕事を避けるように、私が学んだことを付け加えると思いました。 –

1

これは、ストーリーボードのサブビューの1つとコントローラーのビューとの間に何らかの誤った接続があった場合にも発生します。それぞれのサブビューでReferencing Outletsが正しいことを確認してください。私の場合は

2

のXcode 7.3と2.2スウィフト

、私は、ストーリーボードの変更を行い、それTabBarController作られ、それに応じUITabBarControllerへのUIViewControllerから、コントローラのクラスを変更していました。いくつか微調整した後、この変更はうまくいかず、コントローラーのクラスを変更するのを忘れてしまったので、すべての変更を行って黒い画面が表示されました。私はそれをUIViewControllerに戻しました、そして、それは再び働き始めました。

同じ間違いをしていないか確認してください。ストーリーボードにはクラス(UIView/UITabBar/UITableView Controller)がありましたが、これはコードでは同じではありませんでした。

1

私は良いものを得た:

あなたが右のスーパークラス、デリゲート、などを実装していることを確認します。..のViewControllerの上部にあなたが提示しようとしています。すなわち

私は

class TMDetailBlogViewController: UIViewController { 
    //code goes here 
}