23

目前,我正在尝试将键盘工具栏上的下一个/上一个按钮设置为新的、时尚的 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.") ]]];

这是它现在的样子:

在此处输入图像描述

这是我想要的样子: 在此处输入图像描述

关于如何在不实际使用图像的情况下访问这些系统项目的任何想法?我知道它是确切的 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:带有 < > 箭头的工具栏默认情况下与所有 UIWebViews 一起出现,当您点击文本字段时它会出现。

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

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

4

7 回答 7

21

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

在此处输入图像描述

在此处输入图像描述

于 2013-11-03T00:50:35.550 回答
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]];
于 2013-11-03T01:14:12.257 回答
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) 工具栏上的左内边距有点太多了,所以你可以通过在 BSKeyboardControls.m 中的 toolbarItems: 中添加一个负分隔符来修复它:

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

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

于 2013-12-14T07:03:00.927 回答
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

于 2014-01-07T17:16:19.327 回答
2

您可以使用@iftekhar提供的这个很棒的工具IQSegmentedNextPrevious,并根据您提供图像而不是下一个上一个按钮的需要进行自定义。

于 2013-11-09T10:41:58.960 回答
1

使用 Xcode 7.3,您也可以只输入一个符号作为 Bar Item 的标题。这在代码和 Interface Builder 中都有效:

  • 将光标放在您希望符号出现的位置(例如,titleIB 中的框或代码中的引号内)。
  • 在 Xcode 的菜单中,单击 Edit,然后单击 Emoji & Symbols。(或者,按 control-command-space 调出字符列表。)
  • 在搜索框中,键入lessgreater
  • 然后,选择所需的符号。

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

在代码中:

backButton.title = "<"

在 IB 中:

控制命令单击以调出表情符号和符号

于 2016-05-10T21:22:54.747 回答
0

用这个:https://github.com/simonbs/BSKeyboardControls

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

编辑:只需更改段的文本:

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

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

于 2013-09-28T23:51:30.747 回答