2

ビューを画面にスライドさせるために使用されるボタンを表示するビューコントローラーを作成しました。たとえば、このようなビューコントローラーを 3 つ画面上に配置すると、画面の下部にナビゲーションを提供する 3 つのボタンが表示されます。

ビューコントローラーが積み上げられるため、一番上に他のビュー、つまり他のボタンがオーバーレイされます。この状況では、トップビューコントローラーのボタンのみが機能しています.3つすべてをクリック可能にしたいのですが。ビューでユーザーインタラクションを無効にし、ボタンでのみ有効にしようとしましたが、スーパービューの設定がサブビューの設定を無効にしているようです。

何か案は?

4

2 に答える 2

1

ビューとそのコントローラーを混同しているようです。viewControllers はスタックされておらず、単に nib または xib ファイルの一部です。一方、ビューはビュー階層の一部である場合があり、その意味で互いにオーバーレイすることができます。viewController の機能は、画面上のさまざまなビューを管理および調整することです。ビューコントローラーを使用して単一のボタンを管理するのは効率的ではありません。コントローラーの目的は、さまざまなボタン間の通信を容易にすることです (たとえば、番号 3 がタッチされたときにボタン 1、2、および 4 を無効にする)。複数のviewControllerを使用することはAppleによって推奨されていないという@bpapaの声明は、もはや正しくありません。iOs Application Programming Guideの現在のセクションWindows、Views、および View Controllersには、次のように記載されています。

ビュー コントローラは、単一の最上位ビューを直接管理し、そのビューのサブビューのすべてまたは一部を管理する場合があります。シンプルなユーザー インターフェイスの場合、ビュー コントローラーは通常、そのビュー階層内のすべてのビューを管理します。ただし、いくつかの異なる部分で構成されるより複雑なインターフェイスの場合、View Controller はビューのサブセットを管理し、1 つまたは複数のカスタム コントローラー オブジェクトに依存してビュー階層内の他のグループのビューを管理する場合があります。

ドキュメントで明確にされていないが、過去数週間で何度か私を悩ませたことの 1 つは、viewController を UIControl のアクションのターゲットにすることは、その viewController が nib のファイルの所有者である場合にのみ効果があるということです。たとえば、gameViewController と scoreViewController の 2 つの viewController を持つ nib があるとします。gameView には、ゲームのピースとして機能するいくつかのボタンが含まれる場合があり、それらに触れると、gameViewController の -(void)pieceHasBeenTouched:(id)sender メソッドにアクション メッセージが送信されます。これは、gameViewController がファイルの所有者である場合にうまく機能します。

scoreView にボタンがあり、scoreViewController にメッセージを送信できるようにすることは、論理的に思えるかもしれません。たとえば、saveScore などです。理由はまだよくわかりませんが、Responder チェーンでは許可されません。スコア ビューの [保存] ボタンでアクション メッセージを gameViewController に送信する必要があります。

この問題は、2 つのコントローラー間で IBOutlet バインディングを確立することで解決します。通知も別の可能性です。

于 2010-08-10T19:17:10.160 に答える
0

これをコードの costumed : hitTest:withEvent: に追加しUIViewます

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UIView *hittedView = [super hitTest:point withEvent:event];
    return hittedView == self.button ? hittedView : nil;
}

私はこれを参照しました: UserInteraction enable for subview only。コードをテストしました。そしてそれはうまくいきます!

于 2012-11-19T10:44:02.950 に答える