Как добавить UISegmentedControl в мой UIToolbar с помощью раскадровки?

  1. Я пытаюсь добавить сегментированный элемент управления в свою панель UIToolbar ниже, но когда я пытаюсь перетащить его в раскадровку, он заменяет мое табличное представление.
  2. Кроме того, когда я пытаюсь добавить UIBarButton на свою панель инструментов, он толкает мои ячейки прототипа вниз ... у меня неправильная иерархия представлений?
  3. Когда я все равно добавляю элемент UIBarButton, в симуляторе панель инструментов не становится черной прозрачной, как я установил в своем инспекторе управления навигацией. Что с этим делать?

Благодарность!

введите здесь описание изображениявведите здесь описание изображения


person user1337645    schedule 17.06.2012    source источник
comment
Не правильно прочитал вопрос, извините.   -  person brindy    schedule 17.06.2012
comment
Обновил мой ответ, надеюсь, это поможет.   -  person brindy    schedule 17.06.2012


Ответы (4)


1 - Сделайте это программно. Сначала вам нужно назначить фрейм вашей UIToolbar, а затем вы можете добавить в него элементы (сегментированный элемент управления). Однако я предлагаю использовать UIBarButtonItems, которые в основном одинаковы.

Чтобы приклеить его ко дну, попробуйте сделать так:

#define SCREEN_FRAME [[UIScreen mainScreen] applicationFrame]

CGRect frame = CGRectMake(0, [[UIScreen mainScreen] bounds].size.height - 44, [[UIScreen mainScreen] bounds].size.width, 44);
UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:frame];
toolBar.frame = CGRectMake(0,self.view.frame.size.height-toolBar.frame.size.height,SCREEN_FRAME.size.width,toolBar.frame.size.height);

//Setting up the items

UIBarButtonItem *first = [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image.png"] style:UIBarButtonItemStylePlain target:self action:@selector(yourAction:)] autorelease]; 
UIBarButtonItem *second = [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image.png"] style:UIBarButtonItemStylePlain target:self action:@selector(yourAction:)] autorelease]; 

//Creating an array with the items
NSArray *items = [NSArray arrayWithObjects:first,second, nil];

//Assigning the array to the toolBar
[toolBar setItems: items];

Затем вы можете установить его стиль с помощью

mytoolbar.barStyle = UIBarStyleBlack;

2 - То же, что и выше, обрамление.

3. Вам нужно установить стиль навигационного контроллера на черный.
Используйте self.navigationController.navigationBar.style = UIBarStyleBlack; , или в IB выберите кнопки и в Inspector установите Tint или Style на все, что хотите.

Проверьте также этот вопрос

person Phillip    schedule 17.06.2012
comment
как сделать, чтобы он всегда прилипал к низу экрана? прямо сейчас он прокручивается, как прокручивается таблица - person user1337645; 17.06.2012
comment
Хм, до сих пор не прилипает ко дну? Я добавляю панель инструментов в представление следующим образом: [self.view addSubview:toolbar]; - person user1337645; 17.06.2012
comment
Вы используете UITableView? Если да [self.tableView addSubview:toolbar]; - person Phillip; 17.06.2012
comment
попробовал это и все еще не работает .. Да, используя табличное представление. Я думаю, что перетаскивание TVController в раскадровку автоматически создает телевизор. - person user1337645; 17.06.2012
comment
Да, попробуйте установить для него выход. IBOutlet UITableView *tableView; - person Phillip; 17.06.2012
comment
говорит, что представление таблицы уже унаследовано от UITableViewController... также, когда я добавляю linne для toolbar.frame =... панель инструментов загружается ниже начального экрана (мне нужно прокрутить вниз, чтобы увидеть это) - person user1337645; 17.06.2012
comment
Это потому, что он объявлен ниже как подпредставление представления. попробуйте немного настроить фрейм - person Phillip; 17.06.2012
comment
Хорошо, я добавил его в представление navigationController, и он работает! [self.navigationController.view addSubview: панель инструментов]; - person user1337645; 17.06.2012

Чтобы создать элемент Segmented Control на панели инструментов с помощью Конструктора интерфейсов, можно воспользоваться следующей подсказкой.

1) Создайте сегментированный элемент кнопки панели управления в контроллере навигации:

Создать сегментированный элемент кнопки панели управления в контроллере навигации

2) Перетащите Элемент кнопки панели до элемента навигации.

Перетащите элемент кнопки панели до элемента навигации

3) Тогда у вас должна получиться следующая структура

Полученная структура

4) Теперь вы можете выбрать Сегментированный элемент управления, чтобы задать его свойства.

Выберите сегментированный элемент управления, чтобы установить его свойства

person voromax    schedule 08.04.2013

Я предполагаю, что где-то здесь есть контроллер представления навигации. У них есть своя панель инструментов, но она скрыта и пуста. Панель инструментов, которую вы видите, — это просто имитация панели инструментов, позволяющая редактировать пользовательский интерфейс.

Поэтому, чтобы сделать это с помощью раскадровки, не добавляйте сегментированный элемент управления на смоделированную панель инструментов, создайте новую панель инструментов и добавьте ее в дерево представлений, доступных в вашем контроллере (в качестве родственного элемента для вашего табличного представления), и создайте IBOutlet для ссылки Это. Затем в вашем методе viewDidLoad назначьте элементы на панели инструментов панели инструментов, уже созданной контроллером представления.

В этом примере я создал свойство на моем контроллере представления, называемое (хитро) панелью инструментов:

@property (nonatomic, retain) IBOutlet UIToolbar toolbar;

В моей реализации контроллера представления я назначаю элементы панели инструментов вручную:

-(void)viewDidAppear:(BOOL)animated 
{
    [self setToolbarItems:self.toolbar.items animated:NO];
    [self.navigationController setToolbarHidden:NO animated:YES];
}

Вам нужно будет скрыть панель инструментов, когда контроллер представления появляется, например, в вызывающем контроллере представления:

-(void)viewWillAppear:(BOOL)animated
{
    [self.navigationController setToolbarHidden:YES animated:YES];
}

Если, конечно, вы хотите это скрыть.

person brindy    schedule 17.06.2012
comment
Восстановил и отредактировал этот ответ, так как я думаю, что он все еще актуален. - person brindy; 17.06.2012
comment
Когда я добавляю его как родного брата, он фактически не отображается ни в раскадровке, ни в симуляторе. Он скрыт представлением таблицы? - person user1337645; 17.06.2012
comment
Да нигде не показывает. Но вы все равно можете ссылаться на IBOutlet — это просто удобство, поэтому вам не нужно создавать элементы и массив в коде. Затем, если вы используете код, который я дал, элементы появятся на панели инструментов контроллера по умолчанию. - person brindy; 17.06.2012

Я сделал это, поместив UISegmentedController в элемент кнопки панели.

Добавьте панель инструментов в окно UINavigationController, затем включите отображение этой панели инструментов на экране ViewController.

Перетащите кнопку панели на панель инструментов на экране ViewController и перетащите в нее UISegmentedController (изменив размер кнопки на всю ширину экрана)

Чтобы связать все это, перетащите, удерживая нажатой клавишу Ctrl, из UISegmentedController в соответствующий файл .h, перетащите из «ссылающегося выхода» на желтый значок контроллера представления (с тем же именем переменной), затем перетащите из «ValueChanged» на желтый значок ( выбрав метод на контроллере, который вы хотите вызвать при новом выборе).

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

person Peter Johnson    schedule 14.05.2014