Viewcontroller не может перейти к другому представлению? - PullRequest
1 голос
/ 14 января 2011

У меня проблема с образцом ... Но я до сих пор не знаю, почему мое представление не будет переходить в другое представление ...

Сначала я добавляю много представлений в NSMutableArray

static NSString *titleKey = @"title";
static NSString *viewControllerKey = @"viewController";

- (void)viewDidAppear:(BOOL)animated {
    self.menuList = [NSMutableArray array];

    FirstView *firstView = [[FirstView alloc]initWithNibName:nil bundle:nil];
    [self.menuList addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                              NSLocalizedString(@"FirstView", @""), titleKey,
                              firstView, viewControllerKey,
                              nil]];
    [FirstView release];


    SecondView *secondView = [[SecondView alloc]initWithNibName:nil bundle:nil];
    [self.menuList addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                              NSLocalizedString(@"SecondView", @""), titleKey,
                              secondView, viewControllerKey,
                              nil]];
    [SecondView release];

Хорошо ... Так я добавляю viewcontroller в массив ...

Я хочу, чтобы при нажатии на ячейку в табличном представлении он переходил в представление, которое я хочу показать

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *targetViewController = [[self.menuList objectAtIndex: indexPath.row] objectForKey:viewControllerKey];
    targetViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [[self navigationController] pushViewController:targetViewController animated:YES];
}

После того, как я нажимаю на ячейку, ничего не происходит

Сначала я могу предположить, что я неправильно установил массив

Но когда я записываю массив

Это действительно что-то внутри ...

Вот результат:

Log message: MENU LIST (
        {
        title = "FirstView";
        viewController = "<Firstview: 0x5822500>";
    },
        {
        title = "SecondView";
        viewController = "<SecondView: 0x5822870>";
    }
)

Я понятия не имею, почему программа не будет работать ......

У кого-нибудь есть идеи ???

Это просто такая простая вещь, все еще застрявшая здесь на 3 часа ....

Большое спасибо:)

Ответы [ 3 ]

1 голос
/ 14 января 2011

Сначала вам нужно проверить тип targetViewController, чтобы увидеть, дает ли он правильный ViewController. Если он правильный, то

Вам действительно нужно проверить значение self.navigationController, чтобы убедиться, чтоэто не nil

Я подозреваю, что второе - это проблема.

0 голосов
/ 14 января 2011

Чтобы успешно выполнить действие push, вам нужно создать UINavigationController в делегате приложения с контроллером корневого представления (контроллер корневого представления = FirstView-> я надеюсь, что это UIViewController).

После этого в FirstView вы можете позвонить

[[self navigationController] pushViewController:targetViewController animated:YES];

для добавления другого стека UIViewController в стек.

Класс UINavigationController реализует специализированное представление контроллер, который управляет навигацией иерархического содержания. Этот класс не предназначен для подклассов. Вместо, вы используете экземпляры как есть в ситуации, когда вы хотите, чтобы ваш пользовательский интерфейс приложения к отражать иерархическую природу ваш контент. Это навигация интерфейс позволяет представить ваши данные эффективно, а также делает пользователю легче ориентироваться это содержание.

Вот официальная ссылка на документы UINavigationController, они полезны. Ссылка на документацию UINavigationController

0 голосов
/ 14 января 2011

Ну, во-первых, браво, это довольно сложный вопрос.

Я уверен, что мой ответ поможет или нет, но просто выслушаю меня.

при использовании

UIViewController *targetViewController = [[self.menuList objectAtIndex: indexPath.row] objectForKey:viewControllerKey];

вы назначаете класс типа firstview или secondview для uiviewcontroller, который может быть проблемой.

но это правильно, поскольку родительский класс может занять место дочернего класса (при условии, что класс 2 разделил класс uiviewcontroller)

чтобы вы могли установить точку останова на

</p> <ul> <li>(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

и, прежде чем элемент управления достигнет конца функции, наведите курсор на targetViewController и проверьте его содержимое.

если у него есть первое или второе представление, то оно покажет вам тип переменной: первое и второе.

...