Подтвердить что ты не робот

Следующая/предыдущая панель инструментов клавиатуры 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 теперь имеет эту функциональность по умолчанию.

4b9b3361

Ответ 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 и символы