5

見たアニメーションの後にビューを切り替えようとしています:

[UIView beginAnimations: @"Fade Out" context:nil];
[UIView setAnimationDelay:1.0];
[UIView setAnimationDuration:0.25];
splash.alpha = 0.0;
[UIView commitAnimations];
[self.view addSubview : view];

追加するビューの[self.view addSubview : view];名前を追加する必要があるので、次のように作成しましたIBOutlet:(最初のView Controllerの.hファイルで)

IBOutlet UIView *main;

しかし、ストーリーボードのビューに接続しようとすると、うまくいき*main UIViewません... どうもありがとう。

4

4 に答える 4

12

混乱のポイントは、コードでUIオブジェクトを作成することと、InterfaceBuilder/ストーリーボードを使用してグラフィカルに作成することです。

1つの手がかりは、プリプロセッサヒント「IBOutlet」を使用することです。IBはInterfaceBuilder==グラフィック作成用です(ストーリーボードまたはxibファイルを使用)。

ストーリーボードで作成する場合...

  • 完全に正しい構文は次のとおりですが、これまでと同じようにIBOutletプロパティを作成します。
    @property (nonatomic, weak) IBOutlet UIView *main;

  • 「カスタムビュー」ビューをオブジェクトライブラリからストーリーボードシーンにドラッグします。

  • Ctrlキーを押しながらビューからviewControllerにドラッグします。接続するのに適したアイテムのリストが表示されます。IBOutletがリストに含まれている必要があります。それを選択します。

IBOutletの全体的な目的は、コードで使用できるストーリーボードシーンのアイテムへの参照を提供することです。

これを行う必要はありません:

  [self.view addSubview : view];

すでに作成され、ストーリーボードに追加されているためです。ビュー階層で期待どおりに配置されていることを確認してください。

コードで作成する場合...

@interfaceでプロパティを宣言します

  @property (nonatomic, strong) UIView *main;

IBOutletストーリーボードでリンクしていないため、必要ありません。ビュー階層にすぐに割り当てない場合は、「弱い」ではなく「強い」と宣言します)。

この行を追加する前に

  [self.view addSubview : view];

考慮する必要があります:ストーリーボード/ xibに存在しない新しいビューを追加していますか?その場合、作成するまで追加できません。(ストーリーボードにあるビューをストーリーボードシーンに追加しても意味がありません)。

したがって、コードでこれを行っているように見えるので、ビューを追加する前にビューを作成する必要があります。

  UIView* myView = [[UIView alloc] init];

ビュー階層に追加したときに表示される場所がわかるように、フレームプロパティを設定します

  myView.frame = CGRectMake (CGFloat x, CGFloat y, CGFloat width, CGFloat height);

新しく作成したビューをプロパティに割り当てます

  self.main = myView;

ビュー階層に追加します

  [self.view addSubview : myView];

これで、self.mainを使用してコードで参照できます。これは、IB /ストーリーボードに追加し、IBOutletへの参照リンクをCRTLドラッグした場合とまったく同じです。

viewWithTag:コードでビューを作成し、すぐにビュー階層に追加する場合、プロパティを宣言する代わりに、ビューに(数値)タグプロパティを設定することもできます。その場合、スーパービューのメソッドを使用してビューを参照できます。

できないことの1つは、コードでビューを作成し、ストーリーボードを使用してそれを操作することです。

これがすべてお役に立てば幸いです。さらに混乱するかもしれません。

于 2013-01-29T07:55:59.027 に答える
3

私はこれに遅れています。とにかく、最近わか​​ったことを投稿させてください。

私はこの状況を持っています:

1) MenuView(カスタム UIView) を含む BaseViewController

2)MenuViewには、すべてのメニュー項目を保持するmenuTableが含まれています

3)StoryBoardには、MenuViewとMenuTableViewを備えたBaseViewControllerシーンがあります

ストーリーボード上のテーブルを BaseViewController.h にドラッグすることで、通常行う menuTable への IBOutlet 参照を持つことができます。しかし、分離の問題として、カスタム MenuView が MenuTable の設定を担当するようにしたいと考えています。そのためには、MenuView.h からストーリーボードのメニュー テーブルへの IBOutlet 参照接続が必要です。

だからこれは私がやったことです:

1) 最初に MenuView.h @property (weak,nonatomic) IBOutlet UITableView *menuTable; でテーブルの IBOutlet プロパティを作成します。

2) プロパティが作成されると、プロパティ宣言のすぐ左側に、これが IBOutlet 変数であることを示す小さな円が表示されます。

3) XCode の Assistant Editor で StoryBoard を開き、MenuView.h を開いた状態で、円をクリックしてストーリーボードのテーブルにドラッグします。(注: テーブルを StoryBoard から MenuView.h にドラッグしようとしても、できません。理由を確認してください)

それでおしまい。これで、カスタム UiView から StoryBoard への IBOutlect 接続が確立されました。

注 : XCode 7 を使用しており、iOS 7 以降のデバイスを対象としています。(それが何か違いを生むなら)

于 2016-01-03T09:52:08.630 に答える
1

Xcodeまたはストーリーボードを初めて使用する場合は、次の基本的なチュートリアルを参照してください。

iOS5パート1でストーリーボードを開始する

iOS5パート2でストーリーボードを開始する

于 2013-01-29T06:40:24.487 に答える
1

ビューをプロパティとして宣言していますか?

構文は次のようになります。

@property (nonatomic, weak) IBOutlet UIView *main;
于 2013-01-29T06:45:57.610 に答える