2010-08-06 6 views
-2

다음은 내가 가지고 놀았던 코드입니다. 어떤 이유로 나는 한 번에 하나의 버튼을 만들 수 없습니다. 예를 들면 다음과 같습니다. for (i = 1; i < = 12; i ++)는 외부 버튼을 누를 때마다 12 개의 버튼이 만들어 질 때까지 새로운 버튼이 만들어 짐을 의미합니다. 그렇다면 i = 12가 있어야하며 어딘가에서 깨어 야합니다. 그러나 나는이 루프가 작동하도록 할 수 없습니다. 어떤 도움이라도 대단히 감사하겠습니다.한 번에 하나의 UIButton

// 화면 위치에서 Y 축에 버튼을 배치하는 위치 float startPositionY = 70.0;

for(int i = 1; i <= 4; i++) { 

    NSString *button = [NSString stringWithFormat:@"button%i", i]; 

     // NSMutableString version to keep button from changing name. 
     //NSString *button = [NSMutableString stringWithFormat:@"button%i", i]; 

    UIButton *tempBName = (UIButton *)[UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [tempBName setTitle:button forState:UIControlStateNormal]; 
    tempBName.tag = i; 
    [tempBName addTarget:self action:@selector(clickMe:)forControlEvents:UIControlEventTouchUpInside]; 
    tempBName.frame = CGRectMake(0.0, 0.0, 80.0, 50.0); 
    tempBName.center = CGPointMake(160.0, 50.0+startPositionY); 
    tempBName.titleLabel.adjustsFontSizeToFitWidth = TRUE; 
    [self.view addSubview:tempBName]; 

     // Make space between each button 
    startPositionY += 70; 

     // How many buttons out of "i" are we creating? 
    NSLog(@"%d", i); 

     // release button 
    [button release]; 
} 
    // Was the button Pressed? 
NSLog(@"Did Press"); 
    // Did our Position change on the Y-axis? 
NSLog(@"%f", startPositionY); 

감사합니다,

+0

첫 번째로 '버튼'을 놓을 필요가 없습니다. alloc, new 또는 copy가 없습니다. 그래서 당신이 보거나 보지 않는 것? – Pablo

답변

0

당신입니다 이상 방출이 시야에서 사라지게 각 버튼을 클릭합니다. [UIButton buttonWithType ...]을 사용하여 버튼을 만들면 자동 풀에 추가되고 소유권이 없습니다. 보기에 추가하면 보유 수는 1 씩 증가하여 소유권을 부여하지만 [단추 해제]로 다시 해제합니다. [버튼 해제] 선을 제거하면 모두 잘되어야합니다.

Apple의 메모리 관리 프로그래밍 가이드를 읽으십시오.

나는 단추를 클릭 할 때마다 호출해야하는 메서드로 단추 만들기를 이동하여 코드를 다시 작성했습니다. 또한 헤더 (.h) 파일에 buttonCount라는 NSInteger 변수를 선언해야합니다.

- (void)addButton { 

     if (buttonCount == 4) return; 
     buttonCount += 1; 

     UIButton *tempBName = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     [tempBName setTitle:[NSString stringWithFormat:@"button%i", buttonCount]; forState:UIControlStateNormal]; 
     tempBName.tag = buttonCount; 
     [tempBName addTarget:self action:@selector(clickMe:)forControlEvents:UIControlEventTouchUpInside]; 
     tempBName.frame = CGRectMake(0.0, 50.0+(startPositionY*buttonCount)), 80.0, 50.0); 
     // Removed the line setting the center, and move the positioning to the frame above 
     tempBName.titleLabel.adjustsFontSizeToFitWidth = TRUE; 
     [self.view addSubview:tempBName]; 
    } 
+0

안녕하세요, 귀하의 조언을 주셔서 감사합니다 - 나는 Apple 리소스를 확인합니다. 그렇습니다. 코드는 동시에 4 개의 버튼을 제공합니다. 하지만 한 번에 1 버튼을 얻을 수 없습니다. 그것이 내가하려는 일입니다. clickMe 당 1 개의 버튼을 생성하는 방법이 있어야합니다. – nepfable

+0

왜 i <= 4를 i <= 1로 변경하면됩니까? – RunLoop

+0

나는 그것을 처음에 시도했다. 일하지 않았어. 방금 버튼 한 개를 만들었습니다. 이것은 C 반복 유형이어야합니다. 프로그램 시작; 버튼 없음 - AddItem "+"버튼을 생성합니다. AddItem "+"두 번째 버튼을 생성하지만 ... 나는 이것을 얻지 못하고있다. [count = 0; for (;;) if (count == 4) 중단; NSLog (@ "count", count)] 또는 그런 것. – nepfable

1

for 루프를 제거하지 않는 이유는 무엇입니까? 4 개가 아닌 하나의 버튼 만 원한다면 코드를 네 번 실행할 필요가 없습니다.

+0

물론 for 루프를 MAX NUMBER, 즉 i <= 4로 실행하고 싶습니다. 한 번에 하나씩 4 개의 버튼을 생성합니다. 나는 휴식을 가곤했다. 및 "==", 그러나 그들은 아무 효력이있는 것을 보이지 않았다. 나는 ARRAY를 사용하려고 시도했으나 작동하지 않았다. – nepfable

+1

'for' 루프가 사용되는 것에 대해 오해하고 있습니다. 'for' 루프는 멈추지 않고 지시 된 횟수만큼 반복합니다 (중단 지시가없는 한 사용자 입력을 위해 멈추지 않고 루프의 실행을 중단시킵니다). Run Loop의 대답을보십시오. 그게 네가 원하는거야, 내가 제안한 것처럼 for 루프를 사용하지 않는다. – Jasarien

+0

감사합니다. 나는 내 친구를 시정했다. – nepfable

0

음, 괜찮습니다. 너무 어리 석습니다. 나는 어제 그것을 거의 가지고 있었고 공을 떨어 뜨렸다. 그래서 여기에 전체 코드의 완성을위한 코드가 있습니다.

이 코드의 기능은 무엇입니까? 클릭 한 번으로 하나의 버튼을 만들 수 있습니다.

[H 파일] :

@interface testMButton1ViewController : UIViewController { 
    UIButton *addButton; 
} 
@property (nonatomic, retain) IBOutlet UIButton *addButton; 
@property NSInteger buttonCount; 
- (IBAction)addButton:(id)sender; 

[m 파일] :

@synthesize addButton; 
@synthesize buttonCount; 

(IBAction)addButton:(id)sender { 

    float startPositionY = 60.0; 

    if (buttonCount == 6) return; 
    buttonCount += 1; 

    UIButton *tempBName = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [tempBName setTitle:[NSString stringWithFormat:@"button%i", buttonCount] forState:UIControlStateNormal]; 
    tempBName.tag = buttonCount; 
    [tempBName addTarget:self action:@selector(clickMe:)forControlEvents:UIControlEventTouchUpInside]; 
    tempBName.frame = CGRectMake(0.0, 20.0+(startPositionY*buttonCount), 80.0, 50.0); 
    tempBName.center = CGPointMake(160.0, 20.0+(startPositionY*buttonCount)); 
     // Removed the line setting the center, and move the positioning to the frame above 
    tempBName.titleLabel.adjustsFontSizeToFitWidth = TRUE; 
    [self.view addSubview:tempBName]; 
    NSLog(@"%d", buttonCount); 
} 

특별 감사는이 작업을 얻기 위해 모든 노력을 위해 루프를 실행합니다.

+0

간단한 설명. "tempBName.center"에 다시 추가하는 이유는 내가하고있는 일에서 화면의 중심선으로 단추의 위치를 ​​이동해야하기 때문입니다. 나가면 단추가 화면의 왼쪽 끝으로 이동합니다. 그냥 그것에 대해 설명하고 싶었습니다. – nepfable

+0

그러나 몇 가지 실험을 한 후에 나는 "tempBName.center"를 제거하고 그것을 대체 할 수 있음을 발견했다; float startPositionX = 120.0; 0000 + (startPositionY * buttonCount), 80.0, 50.0); 이것은 잘 작동합니다. 다시 한번 Run Loop은 정확합니다. 감사! – nepfable

+0

감사합니다. 내 대답에 동의 함을 표시해주십시오. – RunLoop

관련 문제