когда элемент UISegmentcontrol меняется, почему он скрывает customBadge в IOS 5? - PullRequest
3 голосов
/ 13 февраля 2012

Я добавил пользовательский значок на UISegmentControl. В Xcode 4.0.2 SDK 4.3 работает нормально. Но в Xcode 4.2 SDK 5.0 пользовательский значок не отображается при выборе другого элемента. Я не знаю, почему это происходит? Я использую следующий код для IOS 4.3 Xcode 4.0.2:

- (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];
    }


}

Что еще я должен упомянуть в этом?

1 Ответ

2 голосов
/ 21 февраля 2012

Вы добавляете подпредставление в сегментированный элемент управления.Поскольку вы не знаете, как система перерисовывает элемент управления при выборе другого элемента, вы не можете сказать, будет ли удалено ваше представление.Позвольте элементу управления, кнопке или 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];
...