2013-07-10 2 views
0

UIButton을 만들었습니다. 실제로, 몇 개의 버튼과 나는 그들을 초기화하고 그들을 안으로 설치했다왜 내 버튼이 작동하지 않습니까?

-(void)viewDidLoad 

방법. 내 문제는 지금 내가 만든 메서드에 연결하는 것입니다. 내 버튼의 태그 번호를 특정 상황의 이름으로 바꿀 수있는 typedef 열거 형을 만들었습니다. 이것이 문제인지 또는 무엇인지 모르겠지만 버튼을 눌렀을 때 왜 작동하지 않는지 혼란 스럽습니다. 내 코드는 아래와 같습니다.

내 열거 :

typedef enum { 
DiseasesStrepThroat = 1, 
DiseasesFlu   = 2, 
DiseasesChickenPox = 3, 
DiseasesSmallPox = 4, 
DiseasesMeasels  = 5, 
DiseasesCommonCold = 6 
} DiseasesTagNumber; 

내가있는 UIButton의 모든 개체를 초기화 한; 이미 내 .h 파일에서 IBAction을 사용하고 있기 때문에 걱정할 필요가 없습니다.

여기 내보기로드

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
[super viewDidLoad];  
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 700, 768, 125)]; 
scrollView.contentSize = CGSizeMake(1000, 125); 
scrollView.backgroundColor = [UIColor darkGrayColor]; 
scrollView.showsHorizontalScrollIndicator = YES; 
scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
scrollView.autoresizesSubviews = NO; 
[self.view addSubview:scrollView]; 

////////////////////////////////////////// 
//          // 
//  creating all the buttons  // 
//          // 
////////////////////////////////////////// 

// strep throat 
strep = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
strep.frame = CGRectMake(10, 10, 110, 100); 
[strep setTitle:@"Strep" forState:UIControlStateNormal]; 
[strep setTag:DiseasesStrepThroat]; 
[scrollView addSubview:strep]; 

// the flu 
flu = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
flu.frame = CGRectMake(130, 10, 110, 100); 
[flu setTitle:@"Flu" forState:UIControlStateNormal]; 
[flu setTag:DiseasesFlu]; 
[scrollView addSubview:flu]; 

// chicken pox 
chickenPox = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
chickenPox.frame = CGRectMake(250, 10, 110, 100); 
[chickenPox setTitle:@"Chicken Pox" forState:UIControlStateNormal]; 
[chickenPox setTag:DiseasesChickenPox]; 
[scrollView addSubview:chickenPox]; 

// small pox 
smallPox = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
smallPox.frame = CGRectMake(370, 10, 110, 100); 
[smallPox setTitle:@"Small Pox" forState:UIControlStateNormal]; 
[smallPox setTag:DiseasesSmallPox]; 
[scrollView addSubview:smallPox]; 

// measels 
measels = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
measels.frame = CGRectMake(490, 10, 110, 100); 
[measels setTitle:@"Measels" forState:UIControlStateNormal]; 
[measels setTag:DiseasesMeasels]; 
[scrollView addSubview:measels]; 

// common cold 
commonCold = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
commonCold.frame = CGRectMake(610, 10, 110, 100); 
[commonCold setTitle:@"Common Cold" forState:UIControlStateNormal]; 
[commonCold setTag:DiseasesCommonCold]; 
[scrollView addSubview:commonCold]; 

NSArray *array = [[NSArray alloc] initWithObjects:strep, flu, chickenPox, smallPox, measels, commonCold, nil]; 
for(UIButton *b in array) { 
    b.showsTouchWhenHighlighted = YES; 
} 


//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&// 
//          // 
//  CREATING ALL THE TARGETS  // 
//          // 
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&// 

[strep  addTarget:self action:@selector(showDiseasesWithTag:) forControlEvents:UIControlEventTouchUpInside]; 
[flu  addTarget:self action:@selector(showDiseasesWithTag:) forControlEvents:UIControlEventTouchUpInside]; 
[chickenPox addTarget:self action:@selector(showDiseasesWithTag:) forControlEvents:UIControlEventTouchUpInside]; 
[smallPox addTarget:self action:@selector(showDiseasesWithTag:) forControlEvents:UIControlEventTouchUpInside]; 
[measels addTarget:self action:@selector(showDiseasesWithTag:) forControlEvents:UIControlEventTouchUpInside]; 
[commonCold addTarget:self action:@selector(showDiseasesWithTag:) forControlEvents:UIControlEventTouchUpInside]; 

} 

모든 UIView의 애니메이션 및 완료 블록이 완료되지 않은

- (IBAction) showDiseasesWithTag:(NSInteger)senderTag { 

switch (senderTag) { 
    case DiseasesStrepThroat: 

     a = [[UIAlertView alloc] 
          initWithTitle:@"H" 
          message:@"yo" 
          delegate:self 
          cancelButtonTitle:nil 
          otherButtonTitles:nil]; 
     [a show]; 
     break; 

    case DiseasesFlu: 
     [UIView animateWithDuration:1.0 animations:^ { 

     }completion:^(BOOL finished) { 

     }]; 
     break; 

    case DiseasesChickenPox: 
     [UIView animateWithDuration:1.0 animations:^ { 

     }completion:^(BOOL finished) { 

     }]; 
     break; 

    case DiseasesSmallPox: 
     [UIView animateWithDuration:1.0 animations:^ { 

     }completion:^(BOOL finished) { 

     }]; 
     break; 

    case DiseasesMeasels: 
     [UIView animateWithDuration:1.0 animations:^ { 

     }completion:^(BOOL finished) { 

     }]; 
     break; 

    case DiseasesCommonCold: 
     [UIView animateWithDuration:1.0 animations:^ { 

     }completion:^(BOOL finished) { 

     }]; 
     break; 

} 
} 

아무것도를 지우려면 지금 내 IBAction를 방법을했다입니다. 나는 주로 첫 번째 경우에 초점을 맞추고있다. 첫 번째 사건이 1 이니까요? 0으로 설정하면 아무 일도 없었습니다.

모든 실제 문제는 UIScrollView에서 첫 번째 UIButton을 누를 때 누를 수 있지만 버튼이 IBAction 메서드와 관련이 없다는 것입니다. 전혀 부르지 않는 것 같습니다.

도움을 주시면 감사하겠습니다.

+0

- (IBAction) showDiseasesWithTag:(id)sender { NSInteger senderTag = [sender tag]; switch (senderTag) { ... } } 

아이폰 OS에서 대상 방법은 세 가지 다른 서명 중 하나를 사용할 수 있습니다 불이 아니야? 'lldb'에 중단 점을 설정했거나'NSLog()'호출을 설정 했습니까? – trojanfoe

+0

방금 ​​NSLog()를 첫 번째 case 위치에 두었습니다. 콘솔 출력이 없기 때문에이 함수를 호출하지 않습니다. – user2277872

+0

당신은'switch()'문장 위에 놓았다는 것을 의미합니다. 그렇지 않습니다. – trojanfoe

답변

1

좋아요, 당신은 단순히 액션 메서드에 잘못된 인수를 사용하고 있습니다. 그것은해야한다 :

- (IBAction)actionMethod; 
- (IBAction)actionMethod:(id)sender; 
- (IBAction)actionMethod:(id)sender forEvent:(UIEvent *)event; 

하지만 결코 : 당신에게 액션 메소드가 수행해야합니다 얼마나

- (IBAction)actionMethod:(NSInteger)senderTag; 
+0

와우! 고맙습니다! 나는 많은 다른 유형의 논증을 사용해 본적이 없으므로 이것은 새로운 학습 경험이지만 겉으로보기에는 단순한 오류를 해결해 주셔서 감사합니다! – user2277872

+0

@ user2277872 걱정할 필요가 없습니다. 행복한 코딩. – trojanfoe