【问题标题】:How to position a UIBarButtonItem and add an image to it?如何定位 UIBarButtonItem 并向其添加图像?
【发布时间】:2014-09-19 17:42:36
【问题描述】:

截图在这里:Screenshot

嘿,

我不是编码员,除了一些 HTML/CSS 之外我没有很多经验。我只是一个尝试构建他的第一个应用程序的普通人:)

这是我当前的问题:我想为 UINavigationBar 中的每个按钮提供自己的图像并定位它们,以便它们位于栏上,而不是像屏幕截图中显示的那样挂在栏上。我希望左键位于最左角,右键位于最右端,再加上它们都向上一点。

现在我已经设法至少为所有按钮提供相同的图像(通过 UIBarButtonIteam 外观)。当然这不是我的本意。每个按钮都应该有自己的图像。

你能帮我解决这个问题吗?完成这项工作的最简单方法是什么?我也在使用 Xcode 5 / iOS 7。

【问题讨论】:

    标签: iphone ios7 xcode5 uibarbuttonitem


    【解决方案1】:

    这段代码肯定对你有帮助:

    UIImage *bar_img=[UIImage imageNamed:@"yourbarimage.png"]; [self.navigationController.navigationBar setBackgroundImage:bar_img forBarMetrics:UIBarMetricsDefault];

    UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    UIImage *backBtnImage = [UIImage imageNamed:@"YourImage.png"]  ;
    [backBtn setBackgroundImage:backBtnImage forState:UIControlStateNormal];
    [backBtn addTarget:self action:@selector(ActionOnClick) forControlEvents:UIControlEventTouchUpInside];
    backBtn.frame = CGRectMake(0, 0, 44, 44);
    
    UIView *backview=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 44, 44)];
    [backview addSubview:backBtn];
    
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:backview] ;
    self.navigationItem.leftBarButtonItem = backButton;
    [self.navigationController.navigationBar setHidden:NO];
    

    【讨论】:

    • 就是这样!我不得不对 CGRectMake 进行一些试验,但我可以将按钮放置在需要的位置,并且它还有一个背景图像。唯一的问题是按钮不再起作用。这就是在我添加您的代码_barButton.target = self.revealViewCrontroller_barButton.target = @selector(revealToggle:); 之前它正在做的事情。你能帮我解决这个问题吗?
    • 我自己发现了问题!在玩的时候,我做了以下设置:GCRectMake(0, 0, 0, 44)];,这可能意味着它不再是一个形状,而是一个笔划,因此无法点击。我把它改成了GCRectMake(0, 0, 44, 44)]; 现在它就像一个魅力。道具给你!我很想赞成你的回答,但我现在没有足够的声誉:(
    【解决方案2】:

    您应该使用initWithImage:style:target:action,而不是使用外观代理(它将设置 UIBarButtonItem 的每个实例的样式)。

    【讨论】:

      【解决方案3】:

      试试这个代码可能对你有帮助....

      UIButton  *done=[[UIButton alloc]initWithFrame:CGRectMake(0, 0, 44, 44)];
      [done setBackgroundImage:[UIImage imageNamed:@"imageName.png"] forState:UIControlStateNormal];
      
      UIBarButtonItem *done1=[[UIBarButtonItem alloc]initWithCustomView:done];
      

      【讨论】:

      • 谢谢。但这会导致警告:“未使用的变量'done1'”。你知道为什么会这样吗?
      • 在上面的代码中我想说的是,添加您自己的按钮添加分配给您的导航栏按钮..就像我分配'done1'按钮。
      【解决方案4】:

      试试这个。

      它会帮助你。在 ios 6 和 ios 7 中

      UIImage *image = [UIImage imageNamed:@"filer_iphone.png"];
      //for only ios 7
      if ([UIImage instancesRespondToSelector:@selector(imageWithRenderingMode:)])
      {
          image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
      }
      UIBarButtonItem *item=[[UIBarButtonItem alloc]
                                       initWithImage:image style:UIBarButtonItemStyleBordered      target:self   action:@selector(onSettingsClicked:)];
      [self.navigationItem setRightBarButtonItem:rightBarButoom];
      

      同样适用于左侧 UIBarButton。

      【讨论】:

      • 非常感谢,但我收到警告:“未声明的选择器 'onSettingsClicked' 以及错误:“使用未声明的标识符 'rightBarButoom'”。正如我之前提到的,我绝不是一个编码员,我只是不知道这意味着什么。
      • 嘿,它是你必须声明的选择器。
      • 我已经尝试用谷歌搜索,但我似乎无法理解这意味着什么。从我目前得到的信息来看,我必须用括号来调用方法的名称,对吧?那么我必须先为按钮创建一个方法吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      相关资源
      最近更新 更多