-1

II は、UIBarButton を UINavigationController に追加したいと考えていました。私は次のコードの助けを借りてそれをしました、

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UIViewController *rootController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];

    self.navigationController = [[UINavigationController alloc] initWithRootViewController:rootController];

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];
    return YES;
}


- (void)viewDidLoad
{
    [super viewDidLoad];

    UIBarButtonItem *addInfoButton = [[UIBarButtonItem alloc] initWithTitle:@"Add Info" style:UIBarButtonItemStylePlain target:self action:@selector(addCustomerInfo)];
    self.navigationItem.rightBarButtonItem = addInfoButton;
}

-(void) addCustomerInfo
{
    AddInfoViewController *addVC = [[AddInfoViewController alloc] initWithNibName:@"AddInfoViewController" bundle:nil];

    [addVC setModalTransitionStyle:UIModalTransitionStyleCoverVertical];

    [self presentModalViewController:addVC animated:YES];
}

-(void) addCustomerInfo.h ファイルで" " を宣言する必要がありますか? 私はすでにそれを試しましたが、運がありません。

コードはまだ例外をスローしますが、

2012-08-06 04:16:22.200 TableView[5698:f803] -[RootViewController addCustomerInfo]: インスタンス 0x6c662b0 に送信された認識されないセレクター 2012-08-06 04:16:22.202 TableView[5698:f803] *キャッチされていないためアプリを終了例外 'NSInvalidArgumentException'、理由: '-[RootViewController addCustomerInfo]: 認識されないセレクターがインスタンス 0x6c662b0 に送信されました'

4

2 に答える 2

1

クラスのコードは正しいです。アプリデリゲートを変更する必要があります

App Delegateにプロパティを作成して、ナビゲーションコントローラーを保存することをお勧めします---@property (strong, nonatomic) UINavigationController *navController;それを合成することを忘れないでください。次に、ナビゲーションコントローラを作成するときに、それをプロパティに設定します-self.navController = [[UINavigationController alloc] init];

これにより、NavigationControllerが適切に保持され、アプリケーション内の他のクラスから正しくアクセスできることが保証されます。

それをより明確にするかもしれないいくつかのサンプルコードの下に:

まず、AppDelegateヘッダーファイル:

//AppDelegate.h
#import <UIKit/UIKit.h>


@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    UINavigationController *navController;
}
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UINavigationController *navController;    
@end

そして実装ファイル:

//  AppDelegate.m
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
@synthesize navController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.navController = [[UINavigationController alloc] init];    
    UIViewController *myVC= [[myVC alloc]     init];
    [self.navController pushViewController:myVC animated:NO];
    [self.window addSubview:navController.view];
    [self.window makeKeyAndVisible];
    return YES;
}
于 2012-08-05T14:53:26.273 に答える
1

このチュートリアルをチェックしてください: http://www.innovatelabs.in/2010/03/implementing-uibarbuttonitem/

私は iOS に精通しているわけではありませんが、通常、セレクターを使用するときは、それに追加:します@selector(addCustomInfo:)

関数は次のようになります。

-(void) addCustomInfo:(UIBarButtonItem *)myButton {
    NSLog(@"YOU CLICKED ME!");
}
于 2012-08-05T12:56:01.460 に答える