Отправка контроллера представления с двумя контроллерами навигации

У меня есть приложение, в котором я нажимаю контроллер модального представления. Он работает нормально, но я обеспокоен тем, что закодировал его не самым правильным образом. Я создал два навигационных контроллера, что кажется мне немного хитрым.

По сути, я создал контроллер панели вкладок с 3 вкладками, а затем сделал одну из этих вкладок/контроллеров представления корнем. Позже я (используя некоторую доморощенную разметку основного текста) вызываю контроллер представления, когда пользователь касается определенного слова в абзаце. Нажатый контроллер представления имеет кнопку «Назад», которая работает нормально, и приложение, кажется, в порядке.

Как я уже сказал, все работает, но, похоже, я пишу здесь по кругу. Это правильно?

AppDelegate.h

#import <Foundation/Foundation.h>

@interface AppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate>
{
    UIWindow *window;
    UITabBarController *tabBarController;
}
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UITabBarController *tabBarController;
@end

От AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    ViewController *viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    ViewController2 *viewController2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
    ViewController3 *viewController3 = [[ViewController3 alloc] initWithNibName:@"ViewController3" bundle:nil];

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController];
    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:nav, viewController2, viewController3, nil];
    self.tabBarController.delegate = self;
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

ViewController3.h

#import <UIKit/UIKit.h>
#import "JSCoreTextView.h"
#import "PopupViewController.h"

@class JSTwitterCoreTextView;

@interface ReadingViewController : UIViewController <JSCoreTextViewDelegate>
{
    JSTwitterCoreTextView *_textView;
    UIScrollView *_scrollView;
}
@end

Из ViewController3.m

Здесь я создаю еще один навигационный контроллер. Это хорошая идея?

- (void)textView:(JSCoreTextView *)textView linkTapped:(AHMarkedHyperlink *)link
{
    PopupViewController *popupVC = [[PopupViewController alloc] initWithNibName:@"PopupViewController" bundle:nil];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:popupVC];
    [nav setModalPresentationStyle:UIModalPresentationFullScreen];
    [nav setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
    [self presentModalViewController:nav animated:YES];
}

От PopupViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
                 target:self 
                 action:@selector(done:)]];
}

- (void)done:(id)sender
{
    [self.parentViewController dismissModalViewControllerAnimated:YES];
}

person ardochhigh    schedule 18.06.2012    source источник
comment
Я не уверен, как мне тогда изменить этот код.   -  person ardochhigh    schedule 19.06.2012


Ответы (1)


Похоже, ответ «да». У меня сложилось впечатление, что для приложения существует один контроллер навигации, но он больше похож на один на вкладку, в зависимости от того, будут ли дальнейшие толчки с этой вкладки.

person ardochhigh    schedule 08.07.2012