0

私はこれをよく研究し、いくつかの異なるアプローチを使用しました。このコードは my にありますViewController.m:

1)第一のアプローチ

UIImage *settingsimage = [UIImage imageNamed:@"gearicon"];
  UIBarButtonItem *settingsBarButton =[[UIBarButtonItem alloc] initWithImage:settingsimage style:(UIBarButtonItemStylePlain) target:self action:@selector(switchpages)];

  self.navigationItem.leftBarButtonItem = settingsBarButton;

このコードはエラーなしで実行されますが、ボタンは表示されません!

2) 第二のアプローチ

UIButton *settingbtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [settingbtn addTarget:self action:@selector(switchpages) forControlEvents:UIControlEventTouchUpInside];
    [settingbtn setImage:[UIImage imageNamed:@"gearicon.png"] forState:UIControlStateNormal];
    UIBarButtonItem *newBarItem = [[UIBarButtonItem alloc] initWithCustomView:settingbtn];

    self.navigationItem.leftBarButtonItem = newBarItem;

上記と同じで、エラーはありませんが、ボタンはありません。私が間違っていたところを助けてください。ありがとう。

4

2 に答える 2

1

だから、ここに私の最終的な解決策があります。これにより、NavigationBar の右上に境界線なしで「歯車」アイコンが配置されます。

.h

 @property (strong, nonatomic) IBOutlet UINavigationBar *navBar;
 @property (strong, nonatomic) IBOutlet UINavigationItem *settingsbtn;
 @property(strong, nonatomic)UIButton *navigationButton;

.m

 @synthesize navigationButton;
 @synthesize settingsbtn;
 @synthesize navBar;

ViewDidLoad

//custom settings button
navigationButton = [UIButton buttonWithType:UIButtonTypeCustom];
[navigationButton addTarget:self action:@selector(swithpages)   forControlEvents:UIControlEventTouchUpInside];
[navigationButton setImage:[UIImage imageNamed:@"gearicon.png"]forState:UIControlStateNormal];
[navigationButton setFrame:CGRectMake(0, 0, 30, 35)];
UIBarButtonItem *settingsbutton = [[UIBarButtonItem alloc] initWithCustomView:navigationButton];

settingsbtn.rightBarButtonItem = settingsbutton;

私が見逃している唯一のことは、デフォルトで色が変わるのではなく、ボタンを押すと(Appleのリモートアプリのように)「光る」ことです。

于 2013-03-01T21:06:27.190 に答える
0

ImageViewボタンの背後にある画像を試してみてください。うまくいくでしょう

NavigationController を使用しておらず、NavigationItem を NavigationBar に追加する方法を確認したい場合は、xib に NavigationBar を追加し、その接続インスペクターで IBOutlet を接続する必要があります。ここで、クラスとコードがどのように見えるか...

あなたの.hファイルに

@property(strong,nonatomic)UIImageView *navigationImageView;
@property(strong,nonatomic)UIButton *navigationButton;
@property (strong,nonatomic) IBOutlet UINavigationBar *navBar;

.mファイル内

@synthesize navigationButton;
@synthesize navigationImageView;
@synthesize navBar;

最初に ImageView を作成し、画像付きのボタンを使用している場合はカスタム画像を内部に追加します

UIImage *backImage = [UIImage imageNamed:@"back.png"];
self.navigationImageView = [[UIImageView alloc] initWithImage:backImage];

画像ビューのフレームを画像に設定します

 [self.navigationImageView setFrame: CGRectMake(5, 7, backImage.size.width, backImage.size.height)];

カスタムボタンを作成して画像を割り当てる

self.navigationButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.navigationButton setImage:backImage forState:UIControlStateNormal];

ナビゲーション バーに画像ビューを追加する

[self.navBar addSubview:self.navigationImageView];

[self.navBar addSubview:self.navigationButton];
[self.navBar bringSubviewToFront:self.navigationButton];

UIBarButtonItemカスタム メソッドのカスタム ビューとしてボタンを使用して を作成します。

  UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:self.navigationButton];
    self.navigationItem.leftBarButtonItem = customBarItem;
    [self.navigationButton addTarget:self action:@selector(backMethod) forControlEvents:UIControlEventTouchUpInside];

そして最後に、これでやりたいことは何でもカスタムbackMethod ...テストのためにアラートを表示できます

-(void)backMethod{
    UIAlertView *alert =[[UIAlertView alloc]initWithTitle:@"Info" message:@"custom navigation" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alert show];

}
于 2013-02-28T20:56:22.907 に答える