无法更改自定义 UIBarButton 项目

Cannot Alter Custom UIBarButton Item

我正在尝试向我的项目添加自定义栏按钮,但遇到了一些问题。首先让我们回顾一下我的按钮的要求,它需要:

- to display a custom font
- to be enabled/disabled
- to have its colour animated based to provide user feedback.

所以我首先尝试通过故事板连接一个 barButtonItem,我可以更改颜色并启用禁用它。但是我无法更改字体或为其添加彩色动画。我希望能够使用我已经在应用程序中使用的以下方法来设置颜色动画:

- (void)textFlashTextfieldAnimation:(nonnull UITextField *)view duration:(NSTimeInterval)duration animateToColour:(UIColor*)animationColour textColor:(UIColor*)textColour completion:(void (^)(BOOL finished))completion {
    [UIView transitionWithView:view duration:0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
        view.textColor = animationColour;
    } completion:^(BOOL finished) {
        [UIView transitionWithView:view duration:2.0f options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
            view.textColor = textColour;
        } completion:completion];
    }];
} 

理想情况下,我可以更改此函数以接受 barButtonItem / UIButton,这样我就可以轻松地为其设置动画。但是,如果我通过情节提要连接按钮,我将无法访问按钮的图层,因此无法制作动画。

我已经开始通过代码来解决这个问题,但我已经走到了 2 个死胡同。这是 barButtonItem:

的一个真正基本的实现
UIBarButtonItem *myButton=[[UIBarButtonItem alloc] initWithTitle:@"My Custom Button" style:UIBarButtonItemStylePlain target:self action:@selector(/*do something*/)];
    [self.navigationItem setRightBarButtonItem:myButton];

现在这将起作用,因为我可以像故事板按钮一样使用它,但是我无法更改字体或访问按钮的层,所以它也不好。

然后我尝试通过创建一个 UIView 和一个 UIButton 然后将它们添加到 barButtonItem 来为我的栏按钮创建一个完全自定义的视图,这可以在这里看到:

UIFont *barButtonFonts = [UIFont fontWithName:kFont size:16];

    //Right Button
    //create view
    UIView *rightButtonView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 45, 25)];

    //create button
    UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeSystem];
    rightButton.backgroundColor = [UIColor clearColor];
    rightButton.frame = rightButtonView.frame; //set frame = to view
    [rightButton setTitle:NSLocalizedString(@"Save", nil) forState:UIControlStateNormal];
    rightButton.titleLabel.font = barButtonFonts;

    rightButton.tintColor = [UIColor redColor];

    [rightButton addTarget:self action:@selector(actionMethod) forControlEvents:UIControlEventTouchUpInside];

    [rightButtonView addSubview:rightButton];

    UIBarButtonItem *rightBarButton = [[UIBarButtonItem alloc] initWithCustomView:rightButtonView];

    self.navigationItem.rightBarButtonItem = rightBarButton;

现在我有一个 barButtonItem 可以显示自定义字体,但是它根本没有 UI 交互。 enabled/disabled 和 not-highlighted/highlighted 时看起来一样。按钮正常工作,但看起来不正常。

我是否应该在我的代码中的某处为该按钮创建一个出口,以便我可以在视图中更改该按钮?是否可以在将按钮添加到导航栏后更改按钮?

如果有人有任何建议,我们将不胜感激!

是的,将 barbuttonitem 添加到栏后不可修改。我能想到的唯一方法是在用户与之交互时删除按钮并添加一个新按钮(具有新特性)。我建议您使用自定义工具栏(如普通 UIView),然后向其添加一个普通按钮。自定义会更容易