2012-08-17 5 views
10

보기에서 단추를 제거하고 다른 단추를 추가 할 수 있어야합니다. 내 코드는 다음과 같습니다.removeFromSuperview가 작동하지 않음

-(void)UpdatePromoBanner:(NSString*)value{ 
    [button setTitle:@"newer text" forState:UIControlStateNormal]; 
    for (UIView *subView in emptyViewController.view.subviews) 
    { 
     if(subView.tag == 99) { 
      //--remove button and add an updated one 
      NSLog(@"Remove button?"); 
      [subView removeFromSuperview]; 
      //[subView.superview addSubview:button]; 
     } 
    } 
    NSLog(@"event called"); 

} 

-(void)AddPromoBannerToBottom:(UIView*)view { 

    button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [button addTarget:self 
       action:@selector(aMethod:) 
    forControlEvents:UIControlEventTouchDown]; 
    [button setTitle:lblForBannerButton forState:UIControlStateNormal]; 
    button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 
    button.tag = 99; 

    [view addSubview:button]; 
} 

emptyViewController는 단순한 빈 뷰 컨트롤러입니다. 중간에 단추를 추가하고 있습니다. 태그를 검사하는 NSLog ok를 눌렀지만 뷰가 제거되지 않습니다. 5 초마다 updatepromobanner를 실행하는 스레드를 사용하고 있음을 언급해야합니다.

+29

소문자와 메소드 이름을 시작하십시오. –

답변

42

오스카가 옳다. 메인 스레드에서 인터페이스를 업데이트해야합니다. 내가 도움이 될 몇 가지 코드를 추가 할 것이라고 생각했습니다.

[subView removeFromSuperview]; 

으로 :

는 교체

[subView performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:NO]; 

그리고 난 당신이 아무 것도 변경하지 않고 갈 수 있어야한다고 생각합니다.

+0

나를 몇 시간 동안 미치게 만들었습니다. 감사! – user987723

+0

도와 드리겠습니다. 해피 코딩 :) –

+0

안녕하세요 @ RyanPoolos, 만약 버튼 대신에, 내가 가지고 싶었던 분리 된 viewcontroller taht라면 어떨까요? 제거 할 때마다 오류가 발생합니다. 시간이 있으시면 몇 시간 전에 게시 한 질문입니다. http://stackoverflow.com/questions/15490656/ipad-objective-c-using-removefromsuperview-to-remove-uicollectionviewcontroller 감사합니다! – gdubs

8

스레드가 UI 업데이트를 수행 할 때마다 주 스레드를 호출해야 할 때마다 보조 스레드를 사용하여 UI를 업데이트 할 수 없습니다.

5
dispatch_async(dispatch_get_main_queue(), ^{ 
     [subView removeFromSuperview]; 
}); 

메인 스레드에서 업데이트 UI를 기억 :