目前,我正在尝试将键盘工具栏上的下一个/上一个按钮设置为新的,时尚的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:带<的工具栏>默认情况下,所有UIWebView都显示箭头,当您点击文本字段时会显示箭头。
如果有人对示例项目感兴趣,请告诉我,我会上传链接!
EDIT4:截至2014年5月24日,BSKeyboardControls现在默认具有此功能。
答案 0 :(得分:21)
这些是工具栏中使用的图像,例如后退和前进按钮图像:
答案 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]];
答案 4 :(得分:2)
您可以使用@iftekhar这个精彩的tool并根据您提供图片的需要而不是下一个上一个按钮来自定义IQSegmentedNextPrevious
。
答案 5 :(得分:1)
使用Xcode 7.3,您也可以输入一个符号作为条形码的标题。这适用于代码和Interface Builder:
title
框或代码中的引号内)。默认情况下,小于号和大于号的符号在工具栏中显示为蓝色。
在代码中:
backButton.title = "<"
在IB:
答案 6 :(得分:0)
使用此:https://github.com/simonbs/BSKeyboardControls
但它使用的分段控件在iOS 7中变得扁平化。
编辑: 只需更改细分的文字:
[self setSegmentedControl:[[UISegmentedControl alloc] initWithItems:@[@"<",@">") ]]];
这可能不是最优雅的。 (甚至不确定这个确切的代码编译,但你明白了这一点)