2011-04-27 3 views
0

객체 곱 (난 그렇게 생각 적어도를 ..) :목표 - C :이 목적 프로그래밍의 기초에 대한 초보자의 질문

내가있는 UIView 있고, 프로그램이있는 UIView에 여러 개의 버튼을 추가하고 싶습니다 . 버튼 수는 사용자 입력에 따라 다릅니다.

모든 버튼을 네 개의 특성이있다 :

  1. 그것의 번호 (예를 들어, 버튼 수를 하나, 둘, 셋 등)
  2. 제목 (예를 들어 이쪽을 클릭, 여기를 클릭, 나에게 클릭 등)
  3. (즉, CGRect이 - 크기가 같은 단지의 y 위치를 변경해야하는 상태로 유지) 그것의 위치와 크기
  4. 색상을 (예를 들어, 빨강, 녹색, 파랑 등)

이제 메소드를 작성하여 버튼을 만들 수 있다고 생각했지만, 이것이 매우 건전한 방법인지 완전히 확신 할 수는 없습니다. 나는 내가 물건을 만들어야한다는 느낌이 들었다. 어떻게해야하는지에 대한 도움을 주시면 감사하겠습니다. 여기 내 시도 - 실수로 가득하다 (예를 들어, 나는, 단추 2 등 Button1을 만드는 방법 확실하지 않았다 - 따라서 버튼 [bNumber] 일) :

-(void) createIndexButtonWithNumber:(NSString *)bNumber withTitle:(NSString *)bTitle atPosition:(NSInteger *)bPosition withColour:(NSInteger *)bColour { 

    CGRect buttonFrame = CGRectMake(0,bPosition,25,25); 
    UIButton* button[bNumber] = [[[UIButton alloc] initWithFrame:buttonFrame] autorelease]; 
    UIButton.text = bTitle; 
    if (bColour == 1) {UIButton.color = [UIColor colorWithRed:0.751 green:0.742 blue:0.715 alpha:1.000];}; 
    [indexView addSubview:button[bNumber]]; 

    // to do: if button[bNumber] pressed {do something}; 

} 

을 다음, 나는 것 호출하여 객체를 세 번 '곱'에 같이 :

for (temp = 0; temp < 2; temp++) { 
[self createIndexButtonWithNumber:temp withTitle:[@"Test%i", temp] atPosition:10 withColour:1];} 

을 나는이 잘못하고 서투른, 모든 조금 문제가 있는지, 그래서 나는이 문제를 해결하는 방법에 대한 어떤 제안에 매우 감사하게 될 거라고.

+0

실례지만, 이렇게 곱하면 버튼이 완전히 동일하지는 않습니다. 그렇다면 정확히 동일한 것으로 처리되도록 배열에 추가 할 수 있습니다. Sry이 화제 인 경우 : S – DailyDoggy

답변

1

나는 당신 만 buttonWithType: 방법으로 버튼을 생성해야합니다 UIButton Class Reference

  1. 에 참조하고 싶습니다.

  2. 둘째, 버튼 색상이 없습니다. setTitleColor:forState: 메소드를 사용하여 제목의 색상을 설정할 수 있습니다.

  3. 코드에 문법 오류가 있습니다 (UIButton.text 등). 그런 전화는 할 수 없습니다. UIButton은 수업입니다.

  4. for에있는 createIndexButtonWithNumber...은 동일한 위치에 버튼을 배치합니다. atPosition 입력 매개 변수에는 변경 사항이 없습니다.

  5. NSInteger 변수가 포인터가 아닙니다. *이 필요 없습니다.

  6. ...우리 고투의 끝에서

그렇게 떨어지게 있습니다

-(void)createIndexButtonWithNumber:(NSInteger)bNumber // (미안 그것에 대해, 코드 서식이 일부 문제)

      withTitle:(NSString *)bTitle 
         atPosition:(NSInteger)bPosition 
         withColour:(NSInteger)bColour { 
    CGRect buttonFrame = CGRectMake(0,bPosition,25,25); 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button.frame = buttonFrame; 
    button.tag = bNumber; 
    [button setTitle: [NSString stringWithFormat:@"Button %i", bNumber] 
      forState:UIControlStateNormal]; 
    if (bColour == 1) { 
     [button setTitleColor:[UIColor colorWithRed:0.751 green:0.742 blue:0.715 alpha:1.000] 
        forState:UIControlStateNormal]; 
    }; 

    // you should pass to @selector a description like 'indexAction:' but NOT any calls like '[self indexAction:button]' 
    [button addTarget:self 
       action:@selector(indexAction:) 
    forControlEvents:UIControlEventTouchUpInside]; 
    [indexView addSubview:button]; 
} 

그리고 for 전화 :

for (int temp = 0; temp < 2; temp++) { 
    [self createIndexButtonWithNumber:temp withTitle:[@"Test%i", temp] atPosition:30 * temp withColour:1]; 
} 

업데이트 : 선택기 방법

-(void)indexAction:(id)sender { 
    NSLog(@"Button with tag %d is pressed", ((UIButton *)sender).tag); 
} 
+0

정말 고마워요! 특히 문서에 대한 참조에 대해 - 나는 그 순간을 읽고 있습니다. 그러나 나는 당신의 설명이 훨씬 더 좋다고 말해야합니다. 다시 한번 감사드립니다. –

+0

기쁜 마음으로 도움이되었습니다! 그렇다면 답변으로 표시하십시오 :) – knuku

+0

그냥 후속 질문 : 각 버튼에 동일한 방법을 지정하려고했지만 해당 방법에 변수를 보내고 싶습니다. 이 메소드는 다음과 같이 보입니다 :'- (void) indexAction : (int *) buttonTag' 그리고이 메소드를 각 버튼에 할당하려고합니다 :'action : @selector ([self indexAction : k])' (k는 createIndexButton 메서드에서 할당 한 int이며 ... [self indexAction : k]는 작동하지 않습니다. –

2

다음은 5 개의 버튼을 세로로 연속해서 만드는 예제입니다. 추가로 필요한 것은 태그입니다. 나중에 필요할 때 버튼을 참조하는 데 사용됩니다.

더 많은 객체 지향 프로그램 예제를 읽는 것이 좋습니다.

float buttonPadding = 20; 
float buttonWidth = 80; 
float buttonHeight = 40; 
for (int k=0;k<5;k++) 
{ 
    UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    btn.tag = 1000 + k; 
    btn.frame = CGRectMake(0, k*(buttonPadding+buttonHeight), buttonWidth, buttonHeight); 
    [btn setTitle:[NSString stringWithFormat:@"Button %i", k+1] forState:UIControlStateNormal]; 
    [self.view addSubview:btn]; 
} 
+0

고마워! 그것은 제가 시도했던 것보다 훨씬 더 합리적입니다 ... 예제를 보는 것이 한 가지입니다.이를 적용하고 실제로 본 것을 실제로 적용하는 것은 완전히 다른 것입니다. 도와 주셔서 대단히 감사합니다. –