0

iOS 5 には、UIViewControllers をネストできる便利な機能が追加されています。このパターンを使用すると、カスタム アラート ビューを簡単に作成できました。半透明のビューを作成して画面を暗くし、いくつかのウィジェットを操作できるカスタム ビューを作成しました。VC を表示したい VC の子として追加し、そのビューをサブビューとして追加し、小さなアニメーションを実行して画面に表示しました。

残念ながら、iOS 4.3 をサポートする必要があります。このようなことはできますか、それとも表示したい VC から直接「アラート」を管理する必要がありますか?

より詳しい情報

したがって、ファイル所有者が「TapView」であり、UIButton である子ビューを持つ nib にカスタム ビューを作成するとします。UIButton アクションを TapView の IBAction に関連付けます。

MainControllerView に TapView を追加するだけです。

TapView *tapView = [[TapView alloc] init];
[[self view] addSubview:tapView];

TapView が表示されますが、その UIButton を操作できず、その背後にある MainControllerView の UIButton を操作できます。なんらかの理由で、何が欠けているのかわかりません...

4

2 に答える 2

0

登録 nibを使用してカスタムビューを作成しようとしている2番目のクエリ。FileOwner タイプを変更しないでください。代わりに、最上位のビュー オブジェクトのクラス プロパティに「TapView」を設定してください。

これを行うと、接続を行うときに問題が発生する場合があります。そのためには、接続を行うための TapView ファイルを手動で選択するだけです。

また、ビューをロードするには、その nib ファイルをロードする必要があります。以下のように、TapViewクラスでクラスレベルのヘルパーメソッドを作成できます

+(TapView *) getInstance
{
    NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:@"TapView" owner:self options:nil];

    TapView *view;
    for (id object in bundle) {
        if ([object isKindOfClass:[TapView class]]) {
            view = (TapView *) object;

            break;
        }
    }

    return view;
}

これで、このようなビュー オブジェクトへの参照が得られます

TapView *tapView = [TapView getInstance];
于 2013-06-05T09:54:41.413 に答える
0

これが役立つかどうかはわかりませんが、潜在的な複数のコントローラーをより詳細に制御する必要がある状況では、「マスター」コントローラー オブジェクト (UIViewController の子孫である必要はありません) を持つパターンを実装しました。デリゲート プロトコル (独自のファイルで個別に宣言) を実装し、フックする必要があるその他のコントローラーに、その型のオブジェクトをデリゲートとして宣言させます。必要な時点でデリゲートを使用するコントローラー。あなたの場合、アラートを表示し、ボタンの選択を処理するデリゲートとして機能します。このアプローチは非常に効果的で、シンプルで、通常はクリーンであることがわかります。YMMV ;-)

于 2012-09-05T19:29:15.387 に答える