it-swarm.com.ru

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

Правка: чтобы оно выглядело точно как второе изображение, используйте изображения, предоставленные Джошуа, и сохраните их как [email protected] и [email protected] в свой проект xcode. Используйте код Чуна, но обязательно вызовите метод для получения изображений следующим образом: imageNamed: @ "back", а не @ "back @ 2x". Теперь у вас есть iOS 7 кнопки назад и вперед :)

Правка 2: чтобы он выглядел в точности как кнопки со стрелками «следующий/предыдущий», используйте следующие настройки в правильных методах реализации:

[self.segmentedControl setWidth:50 forSegmentAtIndex:0];
[self.segmentedControl setWidth:38 forSegmentAtIndex:1];

negativeSeparator.width = -19;

EDIT3: панель инструментов со стрелками <> поставляется по умолчанию со всеми UIWebView и появляется при нажатии на текстовое поле.

Если кому-то интересен пример проекта, дайте мне знать, и я выложу ссылку!

EDIT4: по состоянию на 24 мая 2014 г. BSKeyboardControls теперь имеет эту функцию по умолчанию.

22
Josue Espinosa

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) Левый отступ на панели инструментов слишком велик, поэтому вы можете исправить это, добавив отрицательный разделитель в toolbarItems: в 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;
}

Примечание: у меня, вероятно, нет точных значений ширины кнопок и отступов, но вы можете настроить их по своему вкусу!

6
Chun

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

enter image description here

enter image description here

21
Joshua

Используйте иконки, которыми поделился Джошуа, а затем попробуйте следующий фрагмент кода, и все будет хорошо. Я не добавил кнопку готово здесь.

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]];
8
Abhinav

Если вы не против жить на Edge, вы можете использовать недокументированные системные элементы 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
Steve Moser

Вы можете использовать этот замечательный инструмент от @iftekhar и настроить IQSegmentedNextPrevious в соответствии с вашими потребностями в предоставлении изображений вместо следующей предыдущей кнопки. 

2
Mayur Shrivas

Используя Xcode 7.3, вы также можете просто ввести символ в виде title для элемента Bar. Это работает как в коде, так и в Интерфейсном Разработчике:

  • Поместите курсор туда, где вы хотите, чтобы появился символ (например, поле title в IB или внутри кавычек в коде).
  • В меню XCode, нажмите Edit, затем Emoji & Symbols. (Или нажмите control-command-space, чтобы вызвать список символов.)
  • В поле поиска введите less или more.
  • Затем выберите символ, который вы хотите.

Символы «меньше» и «больше» по умолчанию окрашены в синий цвет на панели инструментов.

В коде:

backButton.title = "<"

В ИБ:

 control-command-click to bring up Emoji & Symbols

1
leanne

Используйте это: https://github.com/simonbs/BSKeyboardControls

Но он использует сегментированный элемент управления, сплющенный в iOS 7.

Правка: Просто изменить текст сегментов:

  [self setSegmentedControl:[[UISegmentedControl alloc] initWithItems:@[@"<",@">") ]]];

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

0
Shaunti Fondrisi