Кнопка навигации iPhone назад - PullRequest
0 голосов
/ 28 февраля 2012

У меня проблемы с тем, что кнопка «Назад» не отображается в SettingsViewController. Панель навигации отображается при нажатии на вид, но без кнопки возврата.

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

- (void)viewDidLoad
{
    self.title = @"Settings";
}

- (IBAction)showSettingsModal:(id)sender 
{    
    SettingsViewController *settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];
    UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:settingsViewController] autorelease];

    [self presentModalViewController:navController animated:YES];
    [settingsViewController release];    
}

Ответы [ 4 ]

3 голосов
/ 28 февраля 2012

Вы создаете новый стек навигации. Вам нужно будет добавить свою собственную кнопку «Назад» и установить действие для метода делегата на вызывающем VC, чтобы отклонить ее.

UPDATE: Кажется, есть много путаницы о том, где и как отстранить ModalViewControllers. В большинстве случаев неправильно делать вызов метода Dismiss из самого модального VC, если вы хотите, чтобы родитель принял решение об увольнении. Вместо этого используйте делегирование. Вот простой пример:

ModalViewController.h:

@protocol ModalViewControllerDelegate
-(void)dismissMyModalVC;
@end


@interface ModalViewController : UIViewController {
id < ModalViewControllerDelegate > delegate;
}

@property (nonatomic, retain) id < ModalViewControllerDelegate > delegate;
// The rest of your class properties, methods here

ModalViewController.m

@synthesize delegate;

...

// Put in the Method you will be calling from that Back button you created
[delegate dismissMyModalVC];

CallingViewController.h:

#import "ModalViewController.h"

@interface CallingViewController : UIViewController 
<ModalViewControllerDelegate> 
// Rest of class here

CallingViewController.m:

ModalViewController *mvc = [[ModalViewController alloc] initWithNibName:@"ModalViewController" bundle:nil];
mvc.delegate = self
[self presentModalViewController:mvc animated:YES];

...

// The ModalViewController delegate method
-(void)dismissMyModalVC {
// Dismiss the ModalViewController that we instantiated earlier
[self dismissModalViewControllerAnimated:YES];

Таким образом, VC удаляется должным образом от контроллера, который его создал. Этот метод делегата также может быть изменен для передачи объектов (например, когда вы закончите вход пользователя и т. Д.)

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

Вы можете попробовать это

UIBarButtonItem * backButton = [[UIBarButtonItem alloc]initWithTitle:@"Back"style:UIBarButtonItemStylePlain target:self.navigationItem.backBarButtonItem action:@selector(dismissModalViewControllerAnimated:)];
1 голос
/ 28 февраля 2012

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

0 голосов
/ 28 февраля 2012

Вы представляете свой новый контроллер как контроллер модального вида. Модальный контроллер представляет свою вершину. Вы должны:

 [self.navigationController pushViewController:navController animated:YES];

, чтобы поместить контроллер представления в стек, и тогда вы увидите кнопку Назад.

Прочитайте документацию Apple по представлению контроллеров представления: https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

РЕДАКТИРОВАТЬ Не видел, что вызывающий контроллер представления не является частью контроллера навигации. В этом случае вам придется создать кнопку «Назад» вручную и установить ее в качестве элемента навигации левой панели.

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