2010-03-13 3 views
0

여기에 비슷한 문제가 게시되어 있지만 어떤 솔루션도 저에게 효과가 없습니다. 여기에 간다 :iPhone UIButton addTarget : action : forControlEvents : not working

메인 윈도우 UIView에있는 다른 UIView 프레임 내에 위치한 UIView 프레임 안에 UIButton 인스턴스가 있습니다. 위트로 :

UIWindow 
--> UIView (searchView) 
    --> UISearchBar (findField) 
    --> UIView (prevButtonView) 
    --> UIButton (prevButton) 
    --> UIView (nextButtonView) 
    --> UIButton (nextButton) 

지금까지 그렇게 좋았습니다. 모든 것이 내가 원하는대로 레이아웃되었습니다. 그러나 단추는 모든 종류의 사용자 입력을 허용하지 않습니다. 조치 : : forControlEvents을 : 나는있는 UIButton 방법 addTarget을 사용하고 당신에게 내가 뭘하는지의 아이디어를주고, 여기 nextButton 내 코드입니다 :

nextButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[nextButton setImage:[UIImage imageNamed:@"find_next_on.png"] forState:UIControlStateNormal]; 
[nextButton setImage:[UIImage imageNamed:@"find_next_off.png"] forState:UIControlStateDisabled]; 
[nextButton setImage:[UIImage imageNamed:@"find_next_off.png"] forState:UIControlStateHighlighted]; 
[nextButton addTarget:self action:@selector(nextResult:) forControlEvents:UIControlEventTouchUpInside]; 

메소드 nextResult : 호출되지 없구요,의 상태 버튼이 만지면 바뀌지 않고, 작동 시키려면 할 수있는 일이 없습니다. 이 모든 뷰 레이어에 문제가 있다고 가정합니다. 버튼의 꼭대기에 무언가가 앉아있을 수도 있지만 그게 무엇인지 모릅니다.

정보 오버로드 때문에 모든보기 정보를 인쇄 할 수있는 코드가 있음을 발견했습니다. 이것이 내 전체 뷰 계층 구조에 대한 것입니다.

UIWindow 
{{0, 0}, {320, 480}} 
UILayoutContainerView 
{{0, 0}, {320, 480}} 
    UINavigationTransitionView 
    {{0, 0}, {320, 480}} 
     UIViewControllerWrapperView 
     {{0, 64}, {320, 416}} 
      UIView 
      {{0, 0}, {320, 416}} 
       UIWebView 
       {{0, 44}, {320, 416}} 
        UIScroller 
        {{0, 0}, {320, 416}} 
         UIImageView 
         {{0, 0}, {54, 54}} 
         UIImageView 
         {{0, 0}, {54, 54}} 
         UIImageView 
         {{0, 0}, {54, 54}} 
         UIImageView 
         {{0, 0}, {54, 54}} 
         UIImageView 
         {{-14.5, 14.5}, {30, 1}} 
         UIImageView 
         {{-14.5, 14.5}, {30, 1}} 
         UIImageView 
         {{0, 0}, {1, 30}} 
         UIImageView 
         {{0, 0}, {1, 30}} 
         UIImageView 
         {{0, 430}, {320, 30}} 
         UIImageView 
         {{0, 0}, {320, 30}} 
         UIWebDocumentView 
         {{0, 0}, {320, 21291}} 
       UIView 
       {{0, 0}, {320, 44}} 
        UISearchBar 
        {{10, 8}, {240, 30}} 
         UISearchBarBackground 
         {{0, 0}, {240, 30}} 
         UISearchBarTextField 
         {{5, -2}, {230, 31}} 
          UITextFieldBorderView 
          {{0, 0}, {230, 31}} 
          UIPushButton 
          {{205, 6}, {19, 19}} 
          UIImageView 
          {{10, 8}, {15, 15}} 
          UILabel 
          {{30, 7}, {163, 18}} 
        UIView 
        {{290, 15}, {23, 23}} 
         UIButton 
         {{0, 0}, {0, 0}} 
          UIImageView 
          {{-12, -12}, {23, 23}} 
        UIView 
        {{260, 15}, {23, 23}} 
         UIButton 
         {{0, 0}, {0, 0}} 
          UIImageView 
          {{-12, -12}, {23, 23}} 
    UINavigationBar 
    {{0, 20}, {320, 44}} 
     UINavigationButton 
     {{267, 7}, {48, 30}} 
      UIImageView 
      {{0, 0}, {48, 30}} 
      UIButtonLabel 
      {{11, 7}, {26, 15}} 
     UINavigationItemView 
     {{79, 8}, {180, 27}} 
     UINavigationItemButtonView 
     {{5, 7}, {66, 30}} 
MBProgressHUD 
{{0, 0}, {320, 480}} 
    UIActivityIndicatorView 
    {{141, 206}, {37, 37}} 
    UILabel 
    {{117, 247}, {86, 27}} 

관련 부분은 UINavigationBar 섹션 위에 표시됩니다.

누구든지 의견이 있으십니까? 나는 다 끝났어.

읽어 주셔서 감사합니다.

아론.

답변

2

나는 그것을 알아 냈으므로, 여기에 후계자를위한 거래가있다.

처음에는 단추를 UIView에 중첩시키고 프레임 속성을 설정하여 단추를 배치했습니다. UIView에 대한 UIButton의 상위 요소를 활용하여 동일한 작업을 단순화 할 수있었습니다. 그래서 중첩보기를 멀리했다 그래서 같이있는 UIButton의 위치 선언 :

nextButton.frame = CGRectMake(searchView.frame.size.width - 30, 15, 23, 23); 

을하지만 그건 내 문제가 해결되지 않았다 방금 내 코드를 더 가볍게 만들었습니다. 문제를 일으키는 프레임의 X 속성 계산입니다. 내가 그렇게 리팩터링했을 때 :

NSInteger nextX = searchView.frame.size.width - 30; 
nextButton.frame = CGRectMake(nextX, 15, 23, 23); 

모든 것이 다시 작동하기 시작했다. 그림을 이동.

건배! 아론.