0

私のRootViewControllerでは、画像をまさにこのようにrightBarButtonItemとして設定しましたが、作成したこの2番目のViewControllerでは、この「戻る」ボタンは表示されません。シミュレーターとiPhoneで実行すると、ボタンが表示されるはずの領域をタップして、goBack{}メソッドが呼び出されます。画像だけが表示されていません。何かご意見は?

また、画像に関しては、他のすべての画像をエクスポートするのとまったく同じ方法でエクスポートしています。他のすべてはうまく働いています。戻るボタンの画像を他のいくつかの画像に置き換えましたが、どれも表示されていないため、画像に問題はないようです。私はこれらの画像を正しい順序で作成していると確信しています。とにかく、どんな助けでも大歓迎です。

NewGameViewController.mファイルから:

- (void)viewDidLoad {
    [super viewDidLoad];

    CGFloat startingPoint = 0.0;
    CGRect bounds = self.view.bounds;
    bounds.origin.y = startingPoint;
    bounds.size.height -= startingPoint;

    self.ivarNewGameTableView = [[UITableView alloc] initWithFrame:bounds style:UITableViewStyleGrouped];
    self.ivarNewGameTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
    self.ivarNewGameTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:self.ivarNewGameTableView];

    UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.png"]];
    self.ivarNewGameTableView.backgroundView = backgroundImageView;

    UIImage *mainNavBar = [UIImage imageNamed:@"startNewGameNavBar.png"];
    UIImageView *navBarView = [[UIImageView alloc] initWithImage:mainNavBar];
    [navBarView setFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
    [self.navigationController.navigationBar addSubview:navBarView];

    UIButton *back = [UIButton buttonWithType:UIButtonTypeCustom];

    // neither one of the following lines work.  I know they're supposed to be identical, but
    // seen Xcode be picky.
    back.frame = CGRectMake(0.0, 0.0, 54.0, 36.0);
//    [back setFrame:CGRectMake(0.0, 0.0, 54.0, 36.0)];

    [back addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
    [back setImage:[UIImage imageNamed:@"back.png"] forState:UIControlStateNormal];
    [back setImage:[UIImage imageNamed:@"backTouched.png"] forState:UIControlStateHighlighted];
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:back];
    self.navigationItem.leftBarButtonItem = backButton;
}

-(void)goBack {
    NSLog(@"goBack called.");
//    [self.ivarNewGameTableView pushViewController:];
}
4

2 に答える 2

2

ナビゲーションスタックを使用している場合は、戻るボタンの項目が設定されています。正しく使用するbackBarButtonItemと、好みの動作が得られます。

戻ってきたいメインビューコントローラーで、アイテムをオーバーロードする必要がありbackBarButtonます。

UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle: @"Back" style: UIBarButtonItemStyleBordered target: nil action: nil];

self.navigationItem.backBarButtonItem = newBackButton;

githubのいくつかのコードサンプル

于 2012-12-06T01:13:30.150 に答える
0

Ok。ついにこれを理解した。問題は、新しいゲームビューナビゲーションバーの作成におけるこの行にありました。

[self.navigationController.navigationBar addSubview:navBarView];

これは、ルートビューのナビゲーションバーでも行いました。両方のファイルで、次のようになります。

UIImage *startNewGameNavBar = [UIImage imageNamed:@"startNewGameNavBar.png"];

// with the key line being this one
[self.navigationController.navigationBar setBackgroundImage:startNewGameNavBar forBarMetrics:UIBarMetricsDefault];

noob-speakでは、私のような初心者にもっと多くのプログラマーが使用してほしいので、カスタムナビゲーションバーの後ろにボタンが表示されないという問題があり、私の例のようなコードを使用している場合、それはあなたがサブビューとして追加することは想定されていません。これはそれを他のすべての上に置きます。代わりに、ナビゲーションバーの背景画像を変更すると、もちろん、画像は...(ドラムロールをお願いします)...背景になります。(ドラムロール終了)

ボタン画像の追加については、カスタムタイプのUIButtonを作成し、通常状態と強調表示状態の画像を設定し、goBackメソッドを呼び出すようにボタンを設定し、フレームサイズを設定して、navigationItemのleftBarButtonItemプロパティに割り当てました。 :

UIButton *backButton =  [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setImage:[UIImage imageNamed:@"back.png"] forState:UIControlStateNormal];
[backButton setImage:[UIImage imageNamed:@"backTouched.png"] forState:UIControlStateHighlighted];
[backButton addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
[backButton setFrame:CGRectMake(0.0, 0.0, 54.0, 36.0)];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
于 2012-12-07T17:00:47.757 に答える