2013-06-24 1 views
3

저는 Xamarin Studio (MonoTouch)에서 개발하고 있지만 개념은 같습니다.iOS에서 Subview가 터치를 캡처하지 못하게하는 이유는 무엇입니까?

나는 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); 
    } 
} 
+0

* View.UserInteractionEnabled = true; * 두 번째 하위보기에서 터치 이벤트를 잡는 데 도움이되었습니다. 감사!) –

답변

2

이 문제점을 발견했습니다. UIView.SizeToFit()을 사용하여 너비와 높이를 생성했습니다.

에 따르면 : Having trouble getting UIView sizeToFit to do anything meaningful 그러나 UIView.SizeToFit()는 아무 것도하지 않습니다.

프레임 크기가 적절하지 않으면 표시 되더라도 하위보기에서 터치 이벤트를 캡처 할 수 없습니다.

관련 문제