我创建了一个带有几个屏幕的弹出框,全部由导航控制器控制。我已经看到了这样做的例子,在这些例子中,当你在屏幕之间切换时,导航栏的标题和“完成”按钮总是在同一个位置,从不动画。发生的唯一变化是出现“后退”按钮。
我试图模仿相同的行为,但事情并不完全正确。
每当屏幕转换时,标题和完成按钮向左滑动并淡出,就像视图的普通动画一样。我需要他们留下来,只有视图动画。此外,正在自动生成的“后退”按钮(我没有创建它,但是一个IS由导航栏创建)被标记为前一个屏幕的标题。我需要它只是'回来'。如何自定义自动生成的按钮?或至少停止创作,以便我自己创建一个按钮?
一些代码......
//popover and navbar creation
SettingsPopoverView *settingsPopoverView = [[SettingsPopoverView alloc] initWithNibName:@"SettingsPopoverView" bundle:[NSBundle mainBundle]];
UINavigationController *nav = [[UINavigationController alloc]
initWithRootViewController:settingsPopoverView];
popover = [[UIPopoverController alloc] initWithContentViewController:nav];
popover.delegate = self;
popover.popoverContentSize = CGSizeMake(320, 497);
[popover presentPopoverFromRect:Button.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
然后在我的代码中,一旦用户在第一个弹出窗口中进行选择
//screen navigation call when selection is made
[self.navigationController pushViewController:selectionView animated:YES];
同样,这组代码会动画我的导航栏,并在下一个视图中自动生成一个带有错误标签的后退按钮。我需要停止导航栏的动画并改变后退按钮的标签。
由于
答案 0 :(得分:0)
这是一种方法。在故事板中,我在视图控制器的顶部添加了一个导航栏,在它下面添加了一个容器视图,占据了屏幕的其余部分。我删除了容器视图附带的视图控制器,并将其替换为导航控制器。我在检查器中取消选中导航控制器的“显示导航栏”框。我添加了其他控制器,这些控制器的按钮连接到segue以推送到下一个,并给出了那些控制器标题。在第一个带容器视图的控制器中,我添加了以下代码:
@implementation ViewController {
IBOutlet UINavigationBar *bar;
UINavigationController *nav;
UIBarButtonItem *backButton;
UIBarButtonItem *done;
}
- (void)viewDidLoad {
[super viewDidLoad];
nav = (UINavigationController *)self.childViewControllers[0];
nav.delegate = self;
}
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:viewController.title];
if (done == nil) done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneClicked)];
[item setRightBarButtonItem:done];
if (navigationController.viewControllers.count >1) {
if (backButton == nil) backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(backToPrevious)];
[item setLeftBarButtonItem:backButton];
[bar setItems:@[item] animated:NO];
}else{
[bar setItems:@[item] animated:NO];
}
}
-(void)backToPrevious {
[nav popViewControllerAnimated:YES];
}
-(void)doneClicked {
NSLog(@"Done Clicked");
}