2012-02-13 2 views
3

UISegmentControl에 사용자 정의 배지를 추가했습니다. Xcode 4.0.2 SDK 4.3에서 잘 작동합니다. 그러나 Xcode 4.2 SDK 5.0에서 다른 항목을 선택하면 맞춤 배지가 표시되지 않습니다. 왜 이런 일이 일어날 지 모르겠다. 나는 IOS 4.3 Xcode 4.0.2에 대해 다음 코드를 사용하고 있습니다 : 다른UISegmentcontrol 항목을 변경하면 IOS 5에서 customBadge가 숨겨집니다.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    super.tableView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"wallpaper.png"]]; 
    NSLog(@"Root View Loaded"); 

    segmentedControl = [[UISegmentedControl alloc] initWithItems: 
              [NSArray arrayWithObjects: 
              @"Home",@"Surveys",@"Results",@"Create",@"Settings", 
              nil]]; 
    [segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged]; 
    segmentedControl.frame = CGRectMake(0, 0, 310, 40); 
    segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar; 
    segmentedControl.tintColor = [UIColor darkGrayColor]; 
    segmentedControl.momentary = NO; 
    segmentedControl.highlighted = YES; 

    segmentedControl.selectedSegmentIndex = 0; 

    UIBarButtonItem *segmentBarItem = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl]; 

    NSArray *segmentBarArray = [NSArray arrayWithObjects: 
           segmentBarItem,nil]; 

    [[self appDelegate] setSegmentedControl:segmentedControl]; 
    [[self appDelegate] setSegmentBarArray:segmentBarArray]; 

    [self setToolbarItems:[[self appDelegate] segmentBarArray] animated:NO]; 

    [[self navigationController] setToolbarHidden:NO animated:YES]; 
    [self.navigationItem setHidesBackButton:YES animated:YES]; 
    self.navigationController.toolbar.tintColor = [UIColor blackColor]; 

    int surveycount = [[self appDelegate] getUnreadSurveyCount]; 
    surveyCountBadge = [CustomBadge customBadgeWithString:[NSString stringWithFormat:@"%d",surveycount]]; 
    [surveyCountBadge setFrame:CGRectMake(105, -10, surveyCountBadge.frame.size.width, surveyCountBadge.frame.size.height)]; 

    [segmentedControl addSubview:surveyCountBadge];  
    if (surveycount == 0) { 
     [surveyCountBadge setHidden:YES]; 
    }else{ 
     [surveyCountBadge setHidden:NO]; 
    } 
} 
-(void)segmentAction:(id) sender{ 
    UISegmentedControl *segmentedControl = (UISegmentedControl *)sender; 
    NSLog(@"selected index is %d",segmentedControl.selectedSegmentIndex); 

    if (segmentedControl.selectedSegmentIndex == 0) { 
     [self.navigationController popToRootViewControllerAnimated:YES]; 
    } else if(segmentedControl.selectedSegmentIndex ==1){ 
     surveyForMeViewController = [[SurveyForMeView alloc] initWithNibName:@"SurveyForMeView" bundle:nil]; 
     [self.navigationController pushViewController:surveyForMeViewController animated:YES]; 

    } else if(segmentedControl.selectedSegmentIndex ==2){ 
     resultViewController = [[ResultView alloc] initWithNibName:@"ResultView" bundle:nil]; 
     [self.navigationController pushViewController:resultViewController animated:YES]; 

    } else if (segmentedControl.selectedSegmentIndex ==3) { 
     newSurveyViewController = [[NewSurveyView alloc] initWithNibName:@"NewSurveyView" bundle:nil]; 
     [self.navigationController pushViewController:newSurveyViewController animated:YES]; 

    } else if (segmentedControl.selectedSegmentIndex ==4) { 
     settingsViewControlle = [[SettingsView alloc] initWithNibName:@"SettingsView" bundle:nil]; 
     [self.navigationController pushViewController:settingsViewControlle animated:YES]; 
    } 


} 

모든 것은 나는이에 언급해야한다?

+0

코드를 게시하지 않는 한 아무도 도움을 줄 수 없습니다. – colby

+0

@ 콜비 내 코드 – Siten

답변

2

segmentedControl에 하위보기를 추가합니다. 다른 항목을 선택하면 시스템이 컨트롤을 다시 그리는 방법을 모르기 때문에 뷰를 제거할지 여부를 말할 수 없습니다. 컨트롤, 버튼 또는 segmentedControl이 작동하도록하고 배지를 추가하려면 부모의 하위 뷰로 추가하십시오.

[surveyCountBadge setFrame:CGRectMake(105.0f+segmentedControl.frame.origin.x, 
    -10.0f+sementedControl.frame.origin.y, surveyCountBadge.frame.size.width, 
    surveyCountBadge.frame.size.height)]; 

[[segmentedControl superView] addSubview: surveyCountBadge]; 
+0

그것은 작품 남자 .... 모자 ... 나는 아이폰으로 새로운입니다. – Siten

+0

그러나 내가 그것을 숨길 때 customBadge는 여전히 거기에있다. ... – Siten

+0

물론. 배지는 컨트롤의 일부가 아니므로 별도로 숨길 필요가 있습니다. – Gabriel

관련 문제