2012-09-04 6 views
0

I 의견을 따르고 문제점을 해결하려고 시도하지만 여전히 작동하지 않습니다.uibutton 제목을 지우고 다시 설정하십시오.

run the demo project view

와 나는 TEST2을 클릭, 난 분명히 버튼 타이틀 전에 버튼 제목을 변경하려면,하지만 난 : 난 시뮬레이터에서 테스트 데모를 실행할 때

, 나는이를 얻을 수

이 얻을 : 다른를 클릭하면

after i click test2 button

내가 버튼 제목을 취소 할 수는 없지만 톤.

누구든지 도움을 줄 수 있습니까 ??

여기

-(void)addbutton 
{ 
    for (int i=0; i<3; i++) 
    { 
     UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake((i*100), 0, 100, 100)]; 
     button.titleLabel.text = @""; 
     [button setTag:i]; 
     [button setTitle:[self.demoDataArray objectAtIndex:i] forState:UIControlStateNormal]; 
     [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
     button.backgroundColor = [UIColor clearColor]; 
     [button addTarget:self action:@selector(setButtonTitle:) forControlEvents:UIControlEventTouchUpInside]; 
     [self.demoView addSubview:button]; 
    } 
} 

-(IBAction)setButtonTitle:(id)sender 
{ 
    if ([sender tag] == 0) 
    { 
     self.demoDataArray = [[NSArray alloc] initWithObjects:@"test5", @"test6", @"test7", @"test8", nil]; 
     [self addbutton]; 
    } 
    else if([sender tag] == 1) 
    { 
     self.demoDataArray = [[NSArray alloc] initWithObjects:@"test9", @"test10", @"test11", @"test12", nil]; 
     [self addbutton]; 
    } 
    else if([sender tag] == 3) 
    { 
     self.demoDataArray = [[NSArray alloc]initWithObjects:@"test13", @"test14", @"test15", @"test16", nil]; 
     [self addbutton]; 
    } 
} 
+2

제발 좀 더 설명해주세요. 당신이하려는 것을 얻지 못하고 있습니까? – freelancer

+0

정확히 ... 와트 할 싶어? – IronManGill

+0

@SmartWork Simple은 다른 uibutton을 클릭 할 때 uibutton 제목을 지우고 싶다고 말했습니다. – Allan

답변

1

때마다 시도 내 코드, 당신은 새로운 버튼을 인스턴스화하고 다른 사람의 상단에 추가합니다. 기존 버튼을 업데이트하고 싶을 수도 있습니다. 대신 -addButton 방법이 시도 :

-(void)addbutton 
{ 
    for (int i=0;i<3;i++) 
    { 
     NSInteger tag = i+1; 
     UIButton *button = (UIButton *)[self.view viewWithTag:tag]; 
     if (!button) 
     { 
      button = [[UIButton alloc] initWithFrame:CGRectMake((i*100), 0, 100, 100)]; 
      [button addTarget:self action:@selector(setButtonTitle:) forControlEvents:UIControlEventTouchUpInside]; 
      [button setTag:tag]; 
      [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
      button.backgroundColor = [UIColor clearColor]; 
      [self.demoView addSubview:button]; 
     } 

     button.titleLabel.text = @""; // Not actually sure you need this... 
     NSString *titleText = nil; 
     if (i < self.demoDataArray.count) 
      titleText = [self.demoDataArray objectAtIndex:i]; 
     [button setTitle:titleText forState:UIControlStateNormal]; 

    } 
} 

이제 버튼을, 대상과 행동 주어진 인스턴스 태그,이를 이미 존재하지 않는 경우에만 버튼 계층에 추가됩니다. 그 후에 버튼을 누를 때마다 제목 만 업데이트됩니다. 또한

매우 중요 :가 : 작업 -viewWithTag: 위해서는, 당신은 0이 아닌 당신의 버튼에 태그를 사용해야하는 기본 태그 - 그렇지 않으면 버튼의 슈퍼 뷰가 반환됩니다. 즉, 태그를 확인하는 데 이미 버그가있는 버튼 핸들러에서 다음과 같이 변경해야합니다 (2가 아닌 3을 확인).

-(IBAction)setButtonTitle:(id)sender 
{ 
    if ([sender tag] == 1) 
    { 
     self.demoDataArray = [[NSArray alloc] initWithObjects:@"test5",@"test6",@"test7",@"test8", nil]; 
     [self addbutton]; 
    } 
    else if([sender tag] == 2) 
    { 
     self.demoDataArray = [[NSArray alloc] initWithObjects:@"test9",@"test10",@"test11",@"test12", nil]; 
     [self addbutton]; 
    } 
    else if([sender tag] == 3) 
    { 
     self.demoDataArray = [[NSArray alloc]initWithObjects:@"test13",@"test14",@"test15",@"test16", nil]; 
     [self addbutton]; 
    } 
} 

그 방법은 중복 코드를 제거 할뿐만 아니라 몇 가지 정리를 사용할 수 있으며 여기에 어떻게라도 switch 문을 사용하여 아마 더 적절한입니다 : 1에서 시작과 같이 3 종료 태그를 증가시킵니다. 그러나 그것은 여기도 거기에 없습니다.

좋습니다. 그러면 정상적으로 실행되어야합니다. 나는 이것을 테스트하지 않았거나 컴파일하지 않았다. 컴파일러에 문제가 있다면 스스로 해결할 수 없다는 것을 알려줘. 내가 문제를 발견 할 수 있는지 알게 될 것이다.

+0

맞습니다. 하지만 난 여전히 약간의 문제, demoDataArray 그냥 두 개의 개체가있는 경우 그것을 클릭하고 demoDateArray 변경, 난 여전히 당신과 함께 단어를 변경할 수 있지만 질문은 내가 세 번째 버튼 제목을 지울 수 있습니다. 어떻게해야합니까? – Allan

+0

'for' 루프를 3 번 ​​반복 할 수 있습니다. 각 버튼마다 한 번씩 반복하십시오. 그러나 제목을 정할 때가되면'if (i> = array.count)''true이면 빈 문자열에 제목을 설정하거나'[array objectAtIndex : i]'대신'nil'을 설정하면됩니다. 말이 돼? –

+0

빈 문자열에 제목을 설정하는 것을 이해하지 못하겠습니까 ?? 내 배열에 두 개의 개체가 있습니다. – Allan

1

어떤 버튼을 누를 때이

- (IBAction)firstbtn:(UIButton *)sender { 

    [secondbtn setTitle:@"" forState:UIControlStateNormal]; 

    } 
+0

고맙습니다. 코드를 사용해 보았지만 작동하지 않습니다. 내가 너를 스카 이프에 추가 할 수 있니? – Allan

+0

두 번째 단추 콘센트에 제대로 연결합니까 – freelancer

+0

예 .. 제대로 연결했는데 제목을 지울 수 없습니다 – Allan

관련 문제