панель инструментов не заполняется - PullRequest
1 голос
/ 24 февраля 2011

В моем методе loadView моего контроллера вида у меня есть следующий код:

// Populate self.view and add some views/UI elements

// load Gender selection Bar
self.navigationController.toolbarHidden = NO;
self.navigationController.toolbar.tintColor = [UIColor colorWithRed:0 green:0.37 blue:0.5 alpha:1];

self.genderControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:NSLocalizedString(@"Male", nil), NSLocalizedString(@"Female", nil), nil]];
genderControl.segmentedControlStyle = UISegmentedControlStyleBar;
genderControl.frame = CGRectMake(0, 0, 200, 30);
genderControl.tintColor = [UIColor colorWithRed:0 green:0.37 blue:0.5 alpha:1];
[genderControl addTarget:self action:@selector(changeGender:) forControlEvents:UIControlEventValueChanged];
genderControl.selectedSegmentIndex = GENDER_MALE;

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:genderControl];
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

[[[self navigationController] toolbar] setItems:[NSArray arrayWithObjects:flexSpace, item, flexSpace, nil] animated:YES];
[item release];

Однако, если я загружаю вид, он отображает панель инструментов, но Сегментированный элемент управления не отображается.Если я перемещаю свой код в метод viewWillAppear: он работает, но как только я скрываю свое представление и снова отображаю его, сегментированный элемент управления исчезает заново.

Кто-нибудь знает эту проблему и / или знает, как ее решитьЭто?Выглядит очень странно для меня.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Большая часть вашего кода выглядит нормально для меня, и все должно работать при вызове из метода viewDidLoad или loadView.

Однако, когда вы используете включенную панель инструментов из NavigationController, элементы панели инструментовустанавливаются на ViewController, а не на самой панели инструментов.Поэтому замените эту строку:

[[[self navigationController] toolbar] setItems:[NSArray arrayWithObjects:flexSpace, item, flexSpace, nil] animated:YES];

На это:

[self setToolbarItems:[NSArray arrayWithObjects:flexSpace, item, flexSpace, nil] animated:YES];

Документация здесь: http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/setToolbarItems:animated:

Вы также захотите добавить эту строку:

[flexSpace release];
0 голосов
/ 24 февраля 2011

Вы уверены, что этот код должен быть в loadView? Посмотрите UIViewController docs : loadView используется для построения представления вашего контроллера представления полностью программно - ничего не загружается из кончика, если вы реализуете loadView. Этот код должен быть в viewDidLoad вместо этого? Я вижу, что вы даже не создаете и не назначаете основной UIView в своем методе loadView - который вы обычно ожидаете увидеть, например ::

self.view = [[[UIView alloc] init] autorelease];

Если вы действительно намеревались реализовать loadView, как вы это сделали, вы должны добавить вышеприведенную строку для назначения вашего основного вида в начало метода, а не позже.

Кстати, возможно, не беспокойтесь о вызове [setItems панели инструментов] с анимированным = YES; Не так уж много смысла, и я видел точное значение анимированных параметров, которые в прошлом необъяснимо ломали вещи!

...