【发布时间】:2014-09-10 17:55:05
【问题描述】:
我目前在我的应用程序中使用 SWRevealViewController 作为侧边栏菜单。当我单击其中一个选项时,目标视图控制器没有“返回”按钮,因为它不是来自正确的视图控制器(即要返回的页面)。
因此,我想在目标视图控制器上手动创建一个返回按钮,该按钮将返回到主视图控制器。
我看过这里的代码:How do I manually set the "Back" destination in iOS apps
但我正在努力在 Swift 中实现这一点(一个接一个的错误!)。有什么帮助吗?谢谢!
编辑
我已经尝试了下面的建议,但是后退按钮没有出现。这可能与我将导航栏隐藏在其他视图中并在目标视图上执行以下操作有关:
override func viewDidLoad() {
super.viewDidLoad()
navigationController.setNavigationBarHidden(false, animated:true)
var myBackButton:UIButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton
myBackButton.addTarget(self, action: "popToRoot:", forControlEvents: UIControlEvents.TouchUpInside)
var myCustomBackButtonItem:UIBarButtonItem = UIBarButtonItem(customView: myBackButton)
self.navigationItem.leftBarButtonItem = myCustomBackButtonItem
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func popToRoot(sender:UIBarButtonItem){
self.navigationController.popToRootViewControllerAnimated(true)
}
不确定为什么后退按钮不显示?
编辑
这是来自我的侧边栏视图控制器的 prepareForSegue。如果有办法检查 segue 标识符“test”,那么我可以从这里设置后退按钮?
- (void) prepareForSegue: (UIStoryboardSegue *) segue sender: (id) sender
{
// Set the title of navigation bar by using the menu items
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
UINavigationController *destViewController = (UINavigationController*)segue.destinationViewController;
destViewController.title = [[_menuItems objectAtIndex:indexPath.row] capitalizedString];
if ( [segue isKindOfClass: [SWRevealViewControllerSegue class]] ) {
SWRevealViewControllerSegue *swSegue = (SWRevealViewControllerSegue*) segue;
swSegue.performBlock = ^(SWRevealViewControllerSegue* rvc_segue, UIViewController* svc, UIViewController* dvc) {
UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
[navController setViewControllers: @[dvc] animated: NO ];
[self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];
};
}
}
【问题讨论】:
-
你解决了吗,我也遇到了同样的问题
标签: ios swift uinavigationcontroller