0

の使用に少し問題がありUINavigationControllerます。

最初ViewController (called LaunchViewController)のナビゲーション コントローラー (正常に動作します) を使用pushViewControllerして a を表示することができ、それも正常に動作しますが、(最初のビュー コントローラーから)ビューが表示された後にsecond ViewController (called SettingViewController)3 番目のコントローラーを表示したい場合、ViewController (called IPhonePage),で を使用しnavigation controllerたいIPhonePagenavigation controllernull...

私の質問が明確かどうかわかりません。それを行うために使用するコードを表示できます。

AppDelegate.m :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    LaunchViewController* controller = [[LaunchViewController alloc] initWithNibName:@"LaunchViewController" bundle:nil];
    _navigationController = [[UINavigationController alloc] initWithRootViewController:controller];
    _navigationController.navigationBar.tintColor = [UIColor blackColor];
    [self.window setRootViewController:_navigationController];
    [self.window makeKeyAndVisible];

    return YES;
}

LaunchViewController.m :

- (IBAction)showSettings:(id)sender {
    SettingViewController* controller = [[SettingViewController alloc] initWithNibName:@"SettingViewController" bundle:nil];
    [self.navigationController pushViewController:controller animated:YES];
}

これは正常に動作します(私はにアクセスできnavigation controllerますSettingViewController)

でもこれは、

LaunchViewController.m :

- (void)ShowPageWithIMDevicePage:(id<IMDevicePage>)page {
    [self.navigationController pushViewController:(UIViewController*)page animated:YES];
}

このページは によって作成されました:

- (id<IMDevicePage>)CreatePage {
    return [[IPhonePage alloc] init];
}

私の IPhonePage クラスは次のようになります。

IPhonePage.h :

@interface IPhonePage : UIViewController <IMDevicePage>

IPhonePage.m :

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"navigation controller = %@", self.navigationController);
}

ログにはNavigation Controller = (null)が表示されます。たとえば、I don't have access to thenavigation controller.

誰かが私が何を望んでいるかを理解してくれることを本当に願っています。少し複雑であることはわかっていますが、私がこのようにした特定の理由があります。

ありがとう !乾杯 :)

編集 実際には、ページを作成し、タイトル、コンテンツ、ツールバーなどのさまざまなものを設定してから、 を呼び出すために発生しますpushViewController。奇妙なことに、UIViewController のコンテンツを設定するメソッドがあります。

IPhonePage.m

- (void)SetContentWithIMDeviceControl:(id<IMDeviceControl>)content {
    self.view = (UIView*)content;
}

その後、もう私の viewDidLoad メソッドを呼び出しません (手がかりはありますか?)。また、ビューの下部にツールバーを追加する役割のメソッドがあります

- (void)SetApplicationBarWithIMDeviceApplicationBar:(id<IMDeviceApplicationBar>)appBar {
}

最初はナビゲーションコントローラーでこのツールバーを設定したかったのですが、このメソッドがpushViewControllerメソッドの前に呼び出されるため、ナビゲーションコントローラーは nil です。を呼び出さずにナビゲーションコントローラーを手動で設定する可能性はありますpushViewControllerか? または、ツールバーを追加する他の方法はありますか? ツールバーを宣言してサブビューとして追加するのと同じように?

4

2 に答える 2

1

次のようなものを試してください:

- (void)ShowPageWithIMDevicePage:(id<IMDevicePage>)page {
    YourDelegate* delegate = (YourDelegate*)[[UIApplication sharedApplication] delegate];
    IPhonePage* pageVC = (IPhonePage*)page;
    [delegate.navigationController pushViewController:pageVC animated:YES];
}
于 2012-11-13T15:27:53.180 に答える