0

ナビゲーション バーの上部に情報ボタンを追加しようとしています。情報ボタンは、ユーザーを情報ビューに誘導します。次のコードは、iPhone の既定の情報ボタンをナビゲーション バーに追加します。RootViewController.m の viewDidLoad 関数内に配置されます。

UIButton* infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight]; 
    [infoButton addTarget:self action:@selector(showInfoView:) forControlEvents:UIControlEventTouchUpInside];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:infoButton];

ここで、showInfoView メソッドを実装する必要があり、次のコードが使用されます。

- (IBAction)showInfoView:(id)sender {

// Create the root view controller for the navigation controller
// The new view controller configures a Cancel and Done button for the
// navigation bar.
InfoViewController *addController = [[InfoViewController alloc]
                                          initWithNibName:@"InfoView" bundle:nil];

// Configure the RecipeAddViewController. In this case, it reports any
// changes to a custom delegate object.
addController.delegate = self;

// Create the navigation controller and present it modally.

UINavigationController *navigationController = [[UINavigationController alloc]
                                                initWithRootViewController:addController];
[self presentModalViewController:navigationController animated:YES];

// The navigation controller is now owned by the current view controller
// and the root view controller is owned by the navigation controller,
// so both objects should be released to prevent over-retention.
[navigationController release];

[addController release];    

}

しかし、プログラムをビルドして実行すると、情報ボタンをクリックするとプログラムがクラッシュします。

以前にこの問題に遭遇した人はいますか? 私は広範囲に検索しましたが、showInfoView メソッドの実装に問題があるボディは見当たりませんでした。

4

1 に答える 1

-1

次のコードを使用します。

UIButton* infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight]; 
[infoButton addTarget:self action:@selector(showInfoView:) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.rightBarButtonItem = infoButton;

showInfoView:nibファイル名が「InfoViewController.xib」ではなく「InfoView.xib」であれば、このメソッドは正常に機能するはずです。

于 2011-10-23T09:45:23.010 に答える