下一个/上一个键盘工具栏iOS7

时间:2013-09-23 21:38:57

标签: ios objective-c cocoa-touch 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。

编辑:要使其看起来与第二张图像完全相同,请使用Joshua提供的图像,并将它们保存为back@2x.png和forward@2x.png到您的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:带<的工具栏>默认情况下,所有UIWebView都显示箭头,当您点击文本字段时会显示箭头。

如果有人对示例项目感兴趣,请告诉我,我会上传链接!

EDIT4:截至2014年5月24日,BSKeyboardControls现在默认具有此功能。

7 个答案:

答案 0 :(得分:21)

这些是工具栏中使用的图像,例如后退和前进按钮图像:

enter image description here

enter image description here

答案 1 :(得分:8)

使用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]];

答案 2 :(得分:6)

1)从https://github.com/simonbs/BSKeyboardControls

下载最新文件

2)导入后退/下一个按钮的图像。这些可以是你想要的任何东西,你可以设置合适的尺寸,使它们看起来很好。约书亚有一套好的。我把我保存为“keyboardBack.png”和“keyboardForward.png”

3)在BSKeyboardControls.m中,更新initWithFields:fields。在这里,您可以进行一些自定义,例如设置后退/下一个按钮的宽度。我也在这里删除了完成按钮以关注您的屏幕截图,但您可以将其添加回来。

- (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;
}

注意:我可能没有按钮宽度和填充到精确的规格,但你可以根据自己的喜好进行调整!

答案 3 :(得分:5)

如果你不介意生活在边缘,你可以使用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

答案 4 :(得分:2)

您可以使用@iftekhar这个精彩的tool并根据您提供图片的需要而不是下一个上一个按钮来自定义IQSegmentedNextPrevious

答案 5 :(得分:1)

使用Xcode 7.3,您也可以输入一个符号作为条形码的标题。这适用于代码和Interface Builder:

  • 将光标放在您希望符号出现的位置(例如,IB中的title框或代码中的引号内)。
  • 在Xcode的菜单中,单击编辑,然后单击表情符号&符号。 (或者,按控制命令空间以显示字符列表。)
  • 在搜索框中,输入 less 更多
  • 然后,选择您想要的符号。

默认情况下,小于号和大于号的符号在工具栏中显示为蓝色。

在代码中:

backButton.title = "<"

在IB:

control-command-click to bring up Emoji & Symbols

答案 6 :(得分:0)

使用此:https://github.com/simonbs/BSKeyboardControls

但它使用的分段控件在iOS 7中变得扁平化。

编辑: 只需更改细分的文字:

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

这可能不是最优雅的。 (甚至不确定这个确切的代码编译,但你明白了这一点)