Это правильно, если я переключаю View таким образом ... (iPhone) - PullRequest
1 голос
/ 28 февраля 2010

У меня есть MyAppAppDelegate, он содержит окно и UITabBarController.

@interface MyAppAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    IBOutlet UITabBarController *rootController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *rootController;
@end

И у меня есть представление A, содержащее кнопку для переключения на представление B. Это файл .h:

#import <UIKit/UIKit.h>
@class MyAppAppDelegate;
@class ViewBController;


@interface ViewAController : UIViewController {
    IBOutlet UIView *view;
    IBOutlet UIButton *switchToViewBButton;
}
@property (retain, nonatomic) UIView *view;
@property (retain, nonatomic) UIButton *switchToViewBButton;

-(IBAction) startSwitching: (id)sender;

@end

И это файл ..m:

#import "ViewAController.h"
#import "ViewBController.h"

#import "MyAppAppDelegate.h"

@implementation ViewAController

/*skip the default generated codes*/

-(IBAction) startClock: (id)sender{
    NSLog(@"Start Switching");

    [rootController presentModalViewController:ViewBController animated:YES];
}

Пожалуйста, обратите внимание, что ViewB не может отображаться на UITabBarController, он появляется только при нажатии кнопки ViewA. Также я обнаружил, что отладчик сообщает мне, что rootController не объявлен. но я уже импортирую MyAppDelegate в файл. это много ... ...

Ответы [ 4 ]

1 голос
/ 28 февраля 2010

Вам необходимо синтезировать экземпляр rootController:

@synthesize rootController;

Тогда он должен работать.Поместите эту строку кода ниже строки реализации в файле .m.Нет причин, по которым вы должны получить вторую ошибку, поэтому попробуйте мое решение, а затем сообщите нам, что произошло.Также, пожалуйста, попробуйте написать в полных предложениях.По моему опыту, если вы будете хорошо писать в сообщении на форуме, вы получите больше уважения от людей, которые могут вам помочь.

0 голосов
/ 02 июня 2010
ViewBController *vc = [[[ViewBController alloc] initWithNib:@"ViewBController"
                                                 mainBundle:nil] autorelease];
MyAppDelegate *appDelegate = (MyAppAppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate.rootController presentModalViewController:vc animated:YES];
0 голосов
/ 28 февраля 2010
ViewBController* viewBController = [[[ViewBController alloc] initWithNibName: @"NameOfViewBControllerNibFile" bundle:nil] autorelease];
[self presentModalViewController:viewBController animated:YES];

Вы не можете получить доступ к rootController из ViewAController, потому что это свойство MyAppAppDelegate, а не ViewAController. Если вы хотите получить доступ к UITabBarController, отвечающему за ViewAController, то внутри ViewAController вы используете self.tabBarController

Так что, если вы хотите, чтобы UITabBarController делал выше, измените его на

ViewBController* viewBController = [[[ViewBController alloc] initWithNib: @"NameOfViewBControllerNibFile" mainBundle: nil] autorelease];
[self.tabBarController presentModalViewController:viewBController animated:YES];
0 голосов
/ 28 февраля 2010

Нет, вам нужно сделать что-то вроде этого:

ViewBController* vc = [[ViewBController alloc] initWithNib: @"ViewBController" mainBundle: nil];
if (vc != nil) {
    [rootController presentModalViewController: vc animated:YES];
    [vc release];
}

Ошибка, которую вы делаете, заключается в том, что вы передаете presentModalViewController: класс ViewBController. Вместо этого ему нужен экземпляр .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...