Как отключить DetailViewController UIBarButtonItem из RootViewController? - PullRequest
0 голосов
/ 11 февраля 2011

У меня есть основной вид таблицы. и DetailView. при щелчке по ячейке появляется DetailView этой ячейки, которая показывает детали этой ячейки. В DetailView есть две кнопки: следующая и предыдущая. Я хочу знать, как отключить кнопку подробного просмотра из RootViewcontroller.m. код выглядит так:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    DetailViewController *nextController = [[DetailViewController alloc] init];
    int storyIndex = [indexPath indexAtPosition:[indexPath length] -1];
    nextController = [nextController initWithObjectAtIndex:storyIndex inArray:stories];

    NSString *storyTitle = [[stories objectAtIndex:storyIndex] objectForKey:@"title"];
    nextController.title = @"Details";

    UIBarButtonItem *tempButtonItem = [[[UIBarButtonItem alloc] init] autorelease];
    tempButtonItem.title = @"Back";

    self.navigationItem.backBarButtonItem = tempButtonItem ;

    nextController.sTitle = storyTitle;
    [self.navigationController pushViewController:nextController animated:YES];

    [nextController release];

}

я уже пробовал nextController.next.enabled = NO и [nextController.next setEnabled: NO] после этой строки: [self.navigationController pushViewController: nextController animated: YES];

где next - это имя UIBarButtonItem, которое находится в DetailViewController. Кто-нибудь может сказать мне, как отключить эту кнопку. спасибо заранее

1 Ответ

1 голос
/ 11 февраля 2011

Контроллеры и представления не загружаются одновременно.Это означает, что когда вы создаете экземпляр объекта DetailViewController в вашем случае, представления не отображаются (и если вы используете Nib), это является частью концепции отложенной загрузки.

Таким образом, когда вы в первый раз отправляете сообщение setEnabled = NO, объект будет иметь нулевое значение (отправка сообщений объектам с нулевым разрешением разрешена в Задаче C).

Пример:

[nextController setEnabled:NO] равно [nil setEnabled:NO], и это, безусловно, не то, что вы хотите.

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

И добавьте строку кода над pushViewController:animate

Если вы хотите, чтобы кнопка была инициализирована какотключить, вы можете поместить этот код в viewDidLoad / viewWillAppear в зависимости от контекста вашего приложения.

Это только одно возможное решение.


Отредактированный ответ на запрос в комментарии:

В вашем методе инициализатора в DetailviewController добавьте это:

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(backToRoot)] autorelease];

- (void)backToRoot {
    [self.navigationController popToRootViewControllerAnimated:YES];
}

, а также добавьте подпись метода в ваш заголовочный файл.

Ссылка на UINavigationController: http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

...