突出显示iBarButtonim,如iOS7.1日历-已尝试挫折背景图像

突出显示iBarButtonim,如iOS7.1日历-已尝试挫折背景图像,ios,ios8,calendar,uibarbuttonitem,ios7.1,Ios,Ios8,Calendar,Uibarbuttonitem,Ios7.1,我试图让uibarbuttonite的行为类似于iOS7日历应用程序中的“查看模式”按钮。当点击时,它会高亮显示并保持这种状态,直到再次点击 (抱歉,尚无法嵌入图像) 我已经尝试将BackgroundImage属性设置为具有forState:(UIControlStateHighlighted | UIControlStateSelected)的图像,如建议的那样,没有任何效果。我认为您应该使用自定义视图。请参见使用40x40按钮的示例 UIButton *button = [UIBut

我试图让uibarbuttonite的行为类似于iOS7日历应用程序中的“查看模式”按钮。当点击时,它会高亮显示并保持这种状态,直到再次点击

(抱歉,尚无法嵌入图像)


我已经尝试将BackgroundImage属性设置为具有forState:(UIControlStateHighlighted | UIControlStateSelected)的图像,如建议的那样,没有任何效果。

我认为您应该使用自定义视图。请参见使用40x40按钮的示例

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(0,0,40,40);

    [button setBackgroundImage:[UIImage imageNamed:@"button.png"]  forState:UIControlStateNormal];
    [button setBackgroundImage:[UIImage imageNamed:@"buttonSelected.png"]  forState:UIControlStateSelected];
    [button addTarget:self action:@selector(didTouchButton:) forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
    [self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:buttonItem, nil]];
并在触摸设置中选择

- (void) didTouchButton:(id)sender
{
    UIButton *button = (UIButton*)sender;
    button.selected = YES;

    //Do stuff
}

你的想法看起来不错,但你在iOS7或iOS8中测试过吗?该按钮现在不会出现。我没有测试此代码,但此方法在ios7和ios8上都有效,将尝试共享工作代码现在点击图像时会更改,但这不是永久性的。按钮图像在再次点击之前不会保持选中状态。JU更新了答案,您需要将其设置为选中状态。我最终使用UIbarButtonItem并在运行时更改了它的图像,但我认为它不起作用。这是坏习惯吗?接受你的答案,因为它也解决了问题。谢谢