2012-11-12 11 views
6

navigationItem.titleViewのボタンをプログラムで設定します。navigationItemのボタンを設定する方法titleView?

私は次のコードで試しましたが、成功しませんでした。

UIBarButtonItem *navigationTitleButton = [[UIBarButtonItem alloc] initWithTitle:@"Custom" style:UIBarButtonItemStyleBordered target:self action:@selector(backToHOmePage)]; 

navigationTitleButton.image = [UIImage imageNamed:@"title.png"]; 

self.navigationItem.titleView = navigationTitleButton; 

Warnngは言う:互換性のないポインタ型は '* __強いUIBarButtonItem' から 'UIViewの*' に割り当てる

答えて

13

は、このコードを使用してみてください、それはあなたのために働くかどうかを確認

UIView * container = [[UIView alloc]initWithFrame:CGRectZero]; 
UIButton * button = [[UIButton alloc]initWithFrame:CGRectZero]; 
[button addTarget:self action:@selector(backToHOmePage) forControlEvents:UIControlEventTouchUpInside]; 
[button setImage:[UIImage imageNamed:@"clanak_default.png"] forState:UIControlStateNormal]; 
[button sizeToFit]; 
[container addSubview:button]; 
[button release]; 
[container sizeToFit]; 
self.navigationItem.titleView = container; 
[container release]; 
+0

今私はどこが間違っているのか理解しています。ありがとうございました。 – CroiOS

+7

あなたのソリューションは動作します、ありがとう! UIButtonがUIViewのサブクラスであり、UIButtonをtitleViewとして直接使用できないのはなぜですか? – cph2117

+0

UIButton、UILabelなどで動作します。表示サイズのUIViewをinitWithFrameするだけで済みます。またはEvgenjy Sの回答を参照してください。 – Chucky

0

あなたのボタンの代わりに、UIBarButtonItemいずれかのUIButtonオブジェクトを作成してみてください。 UIButtonはUIViewのサブクラスなので、作成したUIButtonにtitleViewプロパティを設定できるはずです。

10

あなたはBarItemを作成する必要はありません。UIViewクラスオブジェクトを作成する必要があります。

ARC

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; 
view.backgroundColor = [UIColor clearColor]; 

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
button.frame = view.frame; 

[view addSubview:button]; 

self.navigationItem.titleView = view; 

または

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button.frame = CGRectMake(0, 0, 40, 40); 
    self.navigationItem.titleView = button; 
0

あなたは、あなたが実行時にボタンのタイトルを変更することができ、ナビゲーションバーのタイトルビューとしてそのビューを作成し、その後ビューであなたのボタンを追加することができます時間は簡単です。

2

スウィフトバージョン:

var button = UIButton.buttonWithType(UIButtonType.Custom) as UIButton 
button.frame = CGRectMake(0, 0, 100, 40) as CGRect 
button.backgroundColor = UIColor.redColor() 
button.setTitle("Button", forState: UIControlState.Normal) 
button.addTarget(self, action: Selector("clickOnButton:"), forControlEvents: UIControlEvents.TouchUpInside) 
self.navigationItem.titleView = button 

ここでは、最後の行のボタンに見ることができますが、直接のナビゲーションバーの中央のボタンを追加しますnavigationItemのtitleViewに設定されています。ボタンの

対処方法は以下の通りです:

func clickOnButton(button: UIButton) { 

} 
2

あなたはそれがサイズであることを確認していない場合しかし、それは表示されません、直接navigationItemのtitleViewとしてUIImageViewを追加することができます。サイズを設定する最も簡単な方法は、sizeToFit()を使用することです。

この例では、角を丸めて、タップされているかどうかを知る機能も追加しています。

override func viewDidLoad() { 
    super.viewDidLoad() 

    let titleIconButton = UIButton(type: .Custom) 
    titleIconButton.setImage(UIImage(named: "login-icon"), forState: .Normal) 
    titleIconButton.addTarget(self, action: #selector(titleIconTap), forControlEvents: .TouchUpInside) 
    titleIconButton.clipsToBounds = true 
    titleIconButton.layer.cornerRadius = 4 
    titleIconButton.sizeToFit() 
    navigationItem.titleView = titleIconButton 
} 

enter image description here

1

スウィフト3バージョン:

let logoButton = UIButton(type: .custom) 
    logoButton.setImage(#imageLiteral(resourceName: "Logo"), for: .normal) 
    logoButton.sizeToFit() 
    logoButton.addTarget(self, action: #selector(tapLogo), for: .touchUpInside) 

    self.navigationItem.title = "" 
    self.navigationItem.titleView = logoButton 
0

あなたは、実行時にbutton.titleを変更することを計画し、あなたが長いテキストにタイトルを変更した場合、それが中心にされることはありません。 button.sizeToFit()を実行すると、中央に表示されますが、新しいタイトルは "T..e"と表示されます。

解決策は、UIButtonをUIViewに配置することです。そしてUIViewのすべての側面にボタンを制約します。 次に、そのUIViewにnavigationItem.titleViewを設定します。プログラムによるタイトルの変更は完全に処理されます。

関連する問題