当前位置:  开发笔记 > IOS > 正文

在UIToolbar上创建左箭头按钮(如UINavigationBar的"后退"样式)

如何解决《在UIToolbar上创建左箭头按钮(如UINavigationBar的"后退"样式)》经验,为你挑选了8个好方法。

我喜欢在一个UIToolbar.中创建一个"后退"左箭头边框按钮.

据我所知,获得其中一个的唯一方法是保留UINavigationController默认设置,并使用一个左栏项.但我无法找到创建一个作为一个UIBarButtonItem,所以我不能在标准中创建一个UIToolbar,即使它们与UINavigationBars 非常相似.

我可以用按钮图像手动创建它,但我无法在任何地方找到源图像.它们具有alpha通道边缘,因此截屏和切割不会得到非常多样化的结果.

除了我打算使用的每种尺寸和配色方案的截图之外的任何想法?

更新:请停止躲避问题并建议我不应该问这个并且应该使用UINavigationBar.我的应用程序是Instapaper Pro.它只显示一个底部工具栏(为了节省空间和最大化可读内容区域),我希望在底部放置一个左箭头形状的后退按钮.

告诉我,我不应该这样做不是一个答案,当然不值得赏心悦目.



1> PyjamaSam..:

我使用了以下来自http://www.teehanlax.com/blog/?p=447的 psd

http://www.chrisandtennille.com/pictures/backbutton.psd

然后我创建了一个自定义UIView,我在工具栏项的customView属性中使用它.

对我来说效果很好.


编辑: 正如PrairieHippo所指出的那样,maralbjo发现使用以下内容,简单的代码就可以将这个技巧(需要自定义图像在一起)与这个答案相结合.所以这是附加代码:

// Creates a back button instead of default behaviour (displaying title of previous screen)
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_arrow.png"]
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(backAction)];

tipsDetailViewController.navigationItem.leftBarButtonItem = backButton;
[backButton release];


此psd仅适用于1.0f的屏幕比例.在视网膜显示器上,它看起来很糟糕.
不要使用图像,只需正确执行(请参阅http://stackoverflow.com/questions/4260238的答案).

2> Cameron Lowe..:

Unicode方法

我认为使用unicode字符来完成工作要容易得多.您可以通过Google搜索Unicode三角形或Unicode箭头来查看箭头.从iOS6开始,Apple将角色更改为带边框的表情符号字符.要禁用边框,我添加了0xFE0E Unicode变体选择器.

NSString *backArrowString = @"\U000025C0\U0000FE0E"; //BLACK LEFT-POINTING TRIANGLE PLUS VARIATION SELECTOR

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:backArrowString style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.leftButtonItem = backBarButtonItem;

代码块仅用于演示.它适用于任何接受NSString的按钮.

对于完整的字符列表,请搜索Google以获取Unicode字符以及您想要的内容.这是Black Left-Pointing Triangle的条目.

结果

结果



3> AndrewS..:

警告:有报告称这不适用于iOS 6.这可能仅适用于旧版本的操作系统.显然至少有一个开发者因使用这个技巧而拒绝他们的应用程序(参见评论).使用风险由您自己承担.使用图像(见上面的答案)可能是一个更安全的解决方案.

这可以在不使用sekr1t按钮类型101添加自己的图像文件的情况下完成,以获得正确的形状.对我来说,诀窍是弄清楚我可以initWithCustomView用来创造BarButtonItem.我个人需要这个动态导航栏而不是一个toolbar,但我用工具栏测试它,代码几乎相同:

// create button
UIButton* backButton = [UIButton buttonWithType:101]; // left-pointing shape!
[backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"Back" forState:UIControlStateNormal];

// create button item -- possible because UIButton subclasses UIView!
UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];

// add to toolbar, or to a navbar (you should only have one of these!)
[toolbar setItems:[NSArray arrayWithObject:backItem]];
navItem.leftBarButtonItem = backItem;

如果你在工具栏上执行此操作,则必须调整设置项目的方式,但这取决于代码的其余部分,我将其留作读者练习.:P这个样本为我工作(编译和运行).

Blah blah,阅读HIG,不要使用未记录的功能,以及所有这些.只有六种支持的按钮类型,这不是其中之一.


不要这样做 - 你的应用程序将被拒绝.投下这个答案.
我倾向于认为他不确定; 他说"不要使用未记录的API",但没有说他的应用程序被拒绝了.它不是一个未记录的API - 它是一个没有文档记录的价值.如果有人*已拒绝他们的应用,请发布.我继续通过此值获得批准的应用.

4> Alexey..:

在此输入图像描述

首先,你必须找到后退按钮的图像.我使用了一个名为Extractor的漂亮应用程序,可以从iPhone中提取所有图形.在iOS7中,我设法检索被调用的图像UINavigationBarBackIndicatorDefault并且它是黑色的,因为我需要一个红色调,我使用Gimp将颜色更改为红色.

编辑:

正如btate在评论中提到的那样,没有必要使用图像编辑器来改变颜色.以下代码应该可以解决问题:

imageView.tint = [UIColor redColor];
imageView.image = [[UIImage imageNamed:@"UINavigationBarBackIndicatorDefault"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

然后我创建了一个视图,其中包含带有该箭头的imageView,带有自定义文本的标签,并且在视图的顶部,我有一个带动作的按钮.然后我添加了一个简单的动画(淡入淡出和翻译).

以下代码模拟后退按钮的行为,包括动画.

-(void)viewWillAppear:(BOOL)animated{
        UIImageView *imageView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"UINavigationBarBackIndicatorDefault"]];
        [imageView setTintColor:[UIColor redColor]];
        UILabel *label=[[UILabel alloc] init];
        [label setTextColor:[UIColor redColor]];
        [label setText:@"Blog"];
        [label sizeToFit];

        int space=6;
        label.frame=CGRectMake(imageView.frame.origin.x+imageView.frame.size.width+space, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
        UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0, label.frame.size.width+imageView.frame.size.width+space, imageView.frame.size.height)];

        view.bounds=CGRectMake(view.bounds.origin.x+8, view.bounds.origin.y-1, view.bounds.size.width, view.bounds.size.height);
        [view addSubview:imageView];
        [view addSubview:label];

        UIButton *button=[[UIButton alloc] initWithFrame:view.frame];
        [button addTarget:self action:@selector(handleBack:) forControlEvents:UIControlEventTouchUpInside];
        [view addSubview:button];

        [UIView animateWithDuration:0.33 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
            label.alpha = 0.0;
            CGRect orig=label.frame;
            label.frame=CGRectMake(label.frame.origin.x+25, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
            label.alpha = 1.0;
            label.frame=orig;
        } completion:nil];

        UIBarButtonItem *backButton =[[UIBarButtonItem alloc] initWithCustomView:view];
}

- (void) handleBack:(id)sender{
}

编辑:

在我看来,更好的方法是使用手势识别器,而不是添加按钮.

UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleBack:)];
[view addGestureRecognizer:tap];
[view setUserInteractionEnabled:YES];


此按钮上的黑色使其成为模板.您不需要使用gimp来更改它.只需在图像上使用色调`imageView.tint = [UIColor redColor]`和模板渲染模式.`imageView.image = [yourImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];`

5> Adam Rosenfi..:

我不确定这是否可行,但您可以尝试创建一个UINavigationController使用默认设置来创建按钮,在导航控制器的子视图层次结构中找到按钮,调用removeFromSuperview它,销毁导航控制器,然后将按钮添加为工具栏的子视图.您可能还需要retain在调用之前使用该按钮removeFromSuperview(然后release在将其添加为工具栏的子视图后将其添加)以避免在此过程中将其取消分配.



6> Bjørn Egil..:

要使用箭头非常接近的UIButton(我不是设计师;)到iOS 7系统后退箭头:

标准:

标准系统后退箭头

Apple SD Gothic Neo

Apple SD Gothic Neo <角色

在Xcode中:

专注于按钮的标题值字段(或具有文本内容的任何其他视图/控件)

打开编辑 - >特殊字符

选择圆括号组,然后双击"<"字符

将字体更改为:Apple SD Gothic Neo,Regular,所需尺寸(例如20)

根据需要改变颜色

Ref @ staticVoidMan对iOS 7上类似Back的箭头的回答



7> 小智..:

后箭头

如果您不想打扰图像文件,可以使用以下代码在UIView子类中绘制箭头形状:

- (void)drawRect:(CGRect)rect {
    float width = rect.size.width;
    float height = rect.size.height;
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextBeginPath(context);
    CGContextMoveToPoint(context, width * 5.0/6.0, height * 0.0/10.0);
    CGContextAddLineToPoint(context, width * 0.0/6.0, height * 5.0/10.0);
    CGContextAddLineToPoint(context, width * 5.0/6.0, height * 10.0/10.0);
    CGContextAddLineToPoint(context, width * 6.0/6.0, height * 9.0/10.0);
    CGContextAddLineToPoint(context, width * 2.0/6.0, height * 5.0/10.0);
    CGContextAddLineToPoint(context, width * 6.0/6.0, height * 1.0/10.0);
    CGContextClosePath(context);

    CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextFillPath(context);
}

其中箭头视图与宽度6.0和高度10.0成比例



8> quantumpotat..:
    self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;

适合我.当我有更多标签然后可以放在标签栏上时,我使用了这个,并且从"更多"推出的视图控制器覆盖了viewDidLoad中的leftBarButtonItem.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有