2017-12-08 4 views
0

私は自分のプロジェクトにカスタムバーボタンを追加しようとしていますが、いくつか問題があります。まず、私のボタンのための要件の上に行くことができます、それが必要:カスタムUIBarButton項目を変更できない

- 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]; 

さて、これはそれも良くないので、私はしかし、私は、フォントを変更したり、ボタンの層にアクセスすることはできませんストーリーボードのボタンのようにそれを使用することができるという事実に動作します。

私は、UIViewUIButtonを作成し、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インタラクションはまったくありません。有効/無効、強調表示されていない/強調表示されている場合も同じように見えます。ボタンは、それがちょうどそうではないように見えるはずです。

ビュー内でボタンを変更できるように、このボタンのコンセントをコードのどこかに作成する必要がありますか?ナビゲーションバーに追加されたボタンを変更することも可能ですか?

誰かが何か提案があれば、それは分かります!

答えて

1

はいbarbuttonitemはバーに追加した後は変更できません。私が考えることができる唯一の方法は、ユーザーがそのボタンとやり取りするときにボタンを削除し、新しい特性を追加することです。通常のUIViewのようなカスタムツールバーを使用して、それに通常のボタンを追加することをお勧めします。それは簡単にカスタマイズすることができます

+0

はい私はこれを最終的に考え出した。私は、 'barButton'の' customView'プロパティを使っていくつかのアニメーションを行うことを望んでいました。私は現在、ボタンの通常の有効/選択/無効状態を設定しています。 – Axemasta

関連する問題