Следующая/предыдущая панель инструментов клавиатуры iOS7
В настоящее время я пытаюсь установить следующие/предыдущие кнопки на панели инструментов клавиатуры на новые, гладкие кнопки кнопки/кнопки назад iOS 7, которые возвращаются в навигационные контроллеры. Вот что я пытаюсь. Как я могу использовать элемент кнопки панели управления вместо скучного статического текста?
[self setToolbar:[[UIToolbar alloc] initWithFrame:self.frame]];
[self.toolbar setBarStyle:UIBarStyleDefault];
[self.toolbar setAutoresizingMask:(UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth)];
[self addSubview:self.toolbar];
[self setSegmentedControl:[[UISegmentedControl alloc] initWithItems:@[ NSLocalizedStringFromTable(@"Previous", @"BSKeyboardControls", @"Previous button title."),
NSLocalizedStringFromTable(@"Next", @"BSKeyboardControls", @"Next button title.") ]]];
Вот как это выглядит сейчас:
![enter image description here]()
Вот что я хочу, чтобы он выглядел так:
![enter image description here]()
Любые идеи о том, как получить доступ к этим системным элементам без фактического использования изображений? Я знаю его точный элемент кнопки панели управления iOS 7, я просто не знаю, как получить доступ к нему в панели инструментов. Я искал везде. Если это помогает, я использую BSKeyboardControls.
EDIT: чтобы он выглядел точно так же, как на втором изображении, используйте изображения, предоставленные Джошуа, и сохраните их как [email protected] и [email protected] в свой проект xcode. Используйте код Chun, но не забудьте вызвать метод для получения таких изображений: imageNamed: @ "back", а не @ "back @2x". Теперь у вас есть кнопки iOS 7 назад и вперед:)
EDIT2: чтобы он выглядел точно так же, как в следующих/предыдущих стрелочных кнопках, используйте следующие настройки в правильных методах реализации:
[self.segmentedControl setWidth:50 forSegmentAtIndex:0];
[self.segmentedControl setWidth:38 forSegmentAtIndex:1];
negativeSeparator.width = -19;
EDIT3: панель инструментов с < > стрелки появляются по умолчанию со всеми UIWebViews и появляются, когда вы нажимаете текстовое поле.
Если кто-то интересуется примером проекта, дайте мне знать, и я загружу ссылку!
EDIT4: По состоянию на 24 мая 2014 года BSKeyboardControls теперь имеет эту функциональность по умолчанию.
Ответы
Ответ 1
1) Загрузите последние файлы: https://github.com/simonbs/BSKeyboardControls
2) Импортируйте изображения для кнопок "Назад" / "Далее". Они могут быть любыми, что вы хотите, и вы можете установить соответствующие размеры, чтобы они выглядели хорошо. У Джошуа хороший набор. У меня есть сохраненные как "keyboardBack.png" и "keyboardForward.png"
3) В BSKeyboardControls.m обновите поля initWithFields:. Здесь вы можете выполнить некоторую настройку, например, установить ширину ваших задних/следующих кнопок. Я также удалил кнопку "Готово", чтобы следить за снимком экрана, но вы можете добавить его обратно.
- (id)initWithFields:(NSArray *)fields
{
if (self = [super initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 44.0f)])
{
// Creates toolbar
[self setToolbar:[[UIToolbar alloc] initWithFrame:self.frame]];
[self.toolbar setBarStyle:UIBarStyleDefault];
[self.toolbar setAutoresizingMask:(UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth)];
[self addSubview:self.toolbar];
// Import images
UIImage *backImage = [[UIImage imageNamed:@"keyboardBack"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *forwardImage = [[UIImage imageNamed:@"keyboardForward"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
// Create segmentedcontrol
self.segmentedControl = [[UISegmentedControl alloc] initWithItems:@[backImage, forwardImage]];
self.segmentedControl.tintColor = [UIColor clearColor];
// Set button widths
[self.segmentedControl setWidth:50 forSegmentAtIndex:0];
[self.segmentedControl setWidth:50 forSegmentAtIndex:1];
// Other BSKeyboardControls stuff
[self.segmentedControl addTarget:self action:@selector(segmentedControlValueChanged:) forControlEvents:UIControlEventValueChanged];
[self.segmentedControl setMomentary:YES];
[self.segmentedControl setEnabled:NO forSegmentAtIndex:BSKeyboardControlsDirectionPrevious];
[self.segmentedControl setEnabled:NO forSegmentAtIndex:BSKeyboardControlsDirectionNext];
[self setSegmentedControlItem:[[UIBarButtonItem alloc] initWithCustomView:self.segmentedControl]];
[self setVisibleControls:(BSKeyboardControlPreviousNext)];
[self setFields:fields];
}
return self;
}
4) Левое дополнение на панели инструментов слишком много, поэтому вы можете исправить это, добавив отрицательный разделитель в панель инструментов. Элементы: в BSKeyboardControls.m:
- (NSArray *)toolbarItems
{
NSMutableArray *items = [NSMutableArray arrayWithCapacity:3];
if (self.visibleControls & BSKeyboardControlPreviousNext)
{
UIBarButtonItem *negativeSeperator = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
target:nil
action:nil];
negativeSeperator.width = -12;
[items addObject:negativeSeperator];
[items addObject:self.segmentedControlItem];
}
if (self.visibleControls & BSKeyboardControlDone)
{
[items addObject:[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]];
[items addObject:self.doneButton];
}
return items;
}
Примечание. Я, вероятно, не имею ширины кнопок и paddings для точных спецификаций, но вы можете настроить ее по своему вкусу!
Ответ 2
Это изображения, используемые на панели инструментов, например. обратные и обратные изображения кнопок:
![enter image description here]()
![enter image description here]()
Ответ 3
Используйте значки, общие для Джошуа, а затем попробуйте с помощью кода ниже, и вам будет хорошо идти. Я не добавил здесь кнопку done.
UIImage *backImage = [[UIImage imageNamed:@"backImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *forwardImage = [[UIImage imageNamed:@"forward"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.segmentedControl = [[UISegmentedControl alloc] initWithItems:@[backImage, forwardImage]];
[self.segmentedControl addTarget:self action:@selector(segmentedControlChangedState:) forControlEvents:UIControlEventValueChanged];
self.segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
self.segmentedControl.tintColor = [UIColor clearColor];
UIBarButtonItem *aSegmentedControlBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.segmentedControl];
[self setItems:@[aSegmentedControlBarButtonItem, self.flexibleSpace]];
Ответ 4
Если вы не против жить на краю, вы можете использовать незарегистрированные системные элементы Apple, чтобы получить вид iOS 7. Здесь находятся элементы левой и правой кнопки.
[self setDoneButton:[[UIBarButtonItem alloc] initWithBarButtonSystemItem:105 target:nil action:nil]];
[self setDoneButton:[[UIBarButtonItem alloc] initWithBarButtonSystemItem:106 target:nil action:nil]];
Источник: http://iphonedevwiki.net/index.php/UIBarButtonItem
Ответ 5
Вы можете использовать этот отличный инструмент от @iftekhar и настроить IQSegmentedNextPrevious
в соответствии с вашими потребностями в предоставлении изображений вместо следующей предыдущей кнопки.
Ответ 6
Используйте это: https://github.com/simonbs/BSKeyboardControls
Но он использует сегментированный элемент управления, который сглаживается в iOS 7.
Изменить:
Просто измените текст сегментов:
[self setSegmentedControl:[[UISegmentedControl alloc] initWithItems:@[@"<",@">") ]]];
Это может быть не самый элегантный. (Даже не уверен, что этот точный код компилируется, но вы видите точку)
Ответ 7
Используя Xcode 7.3, вы также можете просто ввести символ в качестве заголовка для элемента панели. Это работает как в коде, так и в Interface Builder:
- Поместите курсор туда, где должен появиться символ (например,
title
в IB или в кавычках в коде).
- В меню Xcode нажмите "Изменить", затем "Эможи" и "Символы". (Кроме того, нажмите клавишу control-command-space, чтобы отобразить список символов.)
- В поле поиска введите меньше или больше.
- Затем выберите нужный символ.
По умолчанию символы "меньше" и "больше" по умолчанию окрашены в синий цвет на панели инструментов.
В коде:
backButton.title = "<"
В IB:
![control-command-click, чтобы вызвать Emoji и символы]()