3

Xamarin Studio(MonoTouch)で開発していますが、コンセプトは同じです。

UIViewController があり、その UIViewController 内に、それぞれがタップ イベントに応答する必要があるいくつかのサブビューを追加しました。UITapGestureRecognizer をサブビューにアタッチしましたが、起動しません。「AddExploreButton()」と「AddFollowingButton()」を見てください。

含まれているビュー (MyMenu.View) にジェスチャを追加すると、タップ ジェスチャはキャプチャされますが、イベントを処理するにはサブビューが必要です。

サブビューがジェスチャを受信しない原因は何ですか? (事実上すべてに UserInteractionEnabled = true も設定したことに注意してください)。

次に、これが間違ったコーディング パターンである場合、サブビューをタッチ イベントに接続するにはどうすればよいでしょうか?

public class MyMenu : UIViewController
{
    private UIImageView _settingsButton;
    private TrendingMenuButton _trendingButton;
    private FollowingMenuButton _followingButton;
    private ExploreMenuButton _exploreButton;
    private NotificationsMenuButton _notificationsButton;

    public MyMenu() { }

    public override void ViewDidLoad() {
        base.ViewDidLoad();

        View.Hidden = true;
        View.UserInteractionEnabled = true;
        View.BackgroundColor = UIColor.FromPatternImage(UIImage.FromBundle("images/menu_bg.png"));
        View.Frame = new RectangleF(0, CityTitleBar.NAV_HEIGHT, 320, 349);

        AddSettingsButton();
        AddTrendingButton();
        AddFollowingButton();
        AddExploreButton();
        AddNotificationsButton();
    }

    private void AddSettingsButton() {
        _settingsButton = new UIImageView(UIImage.FromBundle("images/icon_cogwheel.png"));
        _settingsButton.Frame = new RectangleF(new PointF(269, 12), _settingsButton.Frame.Size);
        View.AddSubview(_settingsButton);
    }

    private void AddTrendingButton() {
        _trendingButton = new TrendingMenuButton(42, 33);
        View.AddSubview(_trendingButton);
    }

    private void AddFollowingButton() {
        _followingButton = new FollowingMenuButton(182, 33);
        _followingButton.AddGestureRecognizer(new UITapGestureRecognizer((g) => {
            MenuHelper.HideMenu();
            NavigationHelper.LoadScreen(new FavoritesScreen());
        }));
        View.AddSubview(_followingButton);
    }

    private void AddExploreButton() {
        _exploreButton = new ExploreMenuButton(42, 187);
        _exploreButton.AddGestureRecognizer(new UITapGestureRecognizer((g) => {
            MenuHelper.HideMenu();
            NavigationHelper.LoadScreen(new ExploreScreen());
        }));
        View.AddSubview(_exploreButton);
    }

    private void AddNotificationsButton() {
        _notificationsButton = new NotificationsMenuButton(182, 187);
        View.AddSubview(_notificationsButton);
    }
}
4

1 に答える 1