0

我有一个方法,当用户单击导航栏中的按钮时,我想调用它。如果我像这样添加按钮,那么我的方法会被调用:

  UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"myEditButton"]
                                                                   style:UIBarButtonItemStyleBordered
                                                                  target:self 
                                                                  action: @selector(enterEditMode:)];
  editButton.title = @"Edit";
  [self.navigationItem setRightBarButtonItem:editButton animated:YES];

当用户单击按钮时,我的 enterEditMode: 方法被调用。

然而,使用此代码,结果看起来像附件中的 - 没有文本,但更糟糕的是我的图像位于蓝色按钮的顶部。我不能使用标准系统编辑按钮,因为要求它是黑色而不是蓝色,而且 AFAIA 我无法将标准编辑栏按钮的颜色更改为黑色?

因此,在 xib 中,我创建了一个父 UIView,其中包含一个 UIImageView,它是按钮图像和文本的 UILabel。然后我像这样创建按钮项:

UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithCustomView:self.editButtonParentView];
[editButton setTarget:self];
[editButton setAction: @selector(enterEditMode:)];
editButton.style = UIBarButtonItemStyleBordered;
editButton.target = self;
self.editButtonLabel.text = @"Edit"
[self.navigationItem setRightBarButtonItem:editButton animated:YES];

其中 editButtonParentView 是笔尖中部分视图的 IBOutlet。

这显示得很完美,但是问题是当用户点击它时 enterEditMode: 不会被调用。

为什么它不被调用?

谢谢

在此处输入图像描述

4

1 回答 1

0

在此链接中,我发现了如何获得与系统“编辑”按钮相同的外观,但获得所需的任何背景颜色。试试这个代码:

// 从:

#import "UIBarButtomItem+Tinted.h"

@implementation UIBarButtonItem (Tinted)

+ (UIBarButtonItem *)newBarButtonItemWithTint:(UIColor*)color andTitle:(NSString*)itemTitle andTarget:(id)theTarget andSelector:(SEL)selector
{
    UISegmentedControl *button      = [[UISegmentedControl alloc] initWithItems:@[itemTitle]];
    button.momentary                = YES;
    button.segmentedControlStyle    = UISegmentedControlStyleBar;
    button.tintColor                = color;

    [button addTarget:theTarget action:selector forControlEvents:UIControlEventValueChanged];
    return [[UIBarButtonItem alloc] initWithCustomView:button];
}

@end
于 2012-08-06T18:06:59.263 回答