2014-07-19 17 views
20

Tôi hiện đang sử dụng SWRevealViewController cho trình đơn thanh bên trong ứng dụng của mình. Khi tôi nhấp vào một trong các tùy chọn, trình điều khiển chế độ xem đích không có nút 'quay lại' vì nó không đến từ trình điều khiển chế độ xem thích hợp (ví dụ: trang để quay lại).Nút quay lại tùy chỉnh nhanh và điểm đến

Vì vậy, tôi muốn tạo thủ công nút quay lại trên bộ điều khiển chế độ xem đích sẽ quay lại bộ điều khiển chế độ xem nhà.

tôi luôn nhìn vào mã ở đây: How do I manually set the "Back" destination in iOS apps

Nhưng tôi đang đấu tranh để thực hiện điều này trong Swift (một lỗi sau khi khác!). Bất kỳ giúp đỡ? Cảm ơn!

EDIT

Tôi đã thử những gợi ý dưới đây, nhưng nút quay lại chỉ không xuất hiện. Điều này có thể có cái gì đó với thực tế tôi có thanh điều hướng ẩn trong các chế độ xem khác và thực hiện các thao tác sau trên chế độ xem đích:

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) 
} 

Không chắc chắn tại sao nút quay lại không hiển thị?

Sửa

Đây là prepareForSegue từ bộ điều khiển xem thanh bên tôi. Nếu có một cách để kiểm tra nhận dạng segue 'thử nghiệm' thì tôi có thể thiết lập nút quay lại từ đây?

- (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]; 
    }; 

} 

} 
+0

bạn đã khắc phục chưa, tôi đã gặp vấn đề tương tự – marrioa

Trả lời

23

Bạn có thể viết rằng trong nhanh chóng như thế này

Viết này để thêm nút trên navigationController

navigationController.setNavigationBarHidden(false, animated:true) 
    var myBackButton:UIButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton 
    myBackButton.addTarget(self, action: "popToRoot:", forControlEvents: UIControlEvents.TouchUpInside) 
    myBackButton.setTitle("YOUR TITLE", forState: UIControlState.Normal) 
    myBackButton.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal) 
    myBackButton.sizeToFit() 
    var myCustomBackButtonItem:UIBarButtonItem = UIBarButtonItem(customView: myBackButton) 
    self.navigationItem.leftBarButtonItem = myCustomBackButtonItem 

này sẽ bật để rootViewController

func popToRoot(sender:UIBarButtonItem){ 
     self.navigationController.popToRootViewControllerAnimated(true) 
    } 
+0

Cảm ơn bạn đã trả lời, tôi đã thêm một chút nữa vào bài đăng trên – Prateek

+0

vì bạn ẩn thanh điều hướng nó sẽ không hiển thị. Tại sao bạn ẩn 'navigationBar' – codester

+0

Vì Tôi không cần nó trong phần lớn các ứng dụng của tôi thông qua cách nó hoạt động, nhưng tôi đã cho phép nó được hiển thị trên quan điểm này. Khi tôi áp dụng mã trên, nút quay lại không xuất hiện. Các tiêu đề thanh điều hướng đang hiển thị tốt – Prateek

3

Dưới đây là một phiên bản cập nhật cho Swift 2/2.1:

self.navigationController? .setNavigationBarHidden(false, animated:true) 
let backButton = UIButton(type: UIButtonType.Custom) 
backButton.addTarget(self, action: "methodCall:", forControlEvents: UIControlEvents.TouchUpInside) 
backButton.setTitle("TITLE", forState: UIControlState.Normal) 
backButton.sizeToFit() 
let backButtonItem = UIBarButtonItem(customView: backButton) 
self.navigationItem.leftBarButtonItem = backButtonItem 
5

Trong Swift 2.1

Tôi tùy Navigation Bar Items cách này

  • tôi có thể thay đổi Navigation hình nền thanh, văn bản tiêu đề, màu chữ
  • tôi có thể hiển thị/ẩn trở lại nút
  • Tôi có thể thay đổi Tiêu đề/Biểu tượng hoặc phương thức hành động tùy chỉnh

Trong appdelegate Tôi có

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
    { 
     //Cutomize navigation bar 
     let navBgImage:UIImage = UIImage(named: "dummy_navigation_bg_image")! 
     UINavigationBar.appearance().setBackgroundImage(navBgImage, forBarMetrics: .Default) 
     UINavigationBar.appearance().tintColor = UIColor.whiteColor() 
     UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor()]; 


     return true 
    } 

Trong ViewController tôi cập nhật Navigation Các đề mục trong phương pháp viewWillAppear cách này

override func viewWillAppear(animated: Bool) 
    { 
     super.viewWillAppear(animated) 
     setupNavigationBar() 
    } 

    // MARK: - NavigationBar methods 
    func setupNavigationBar() 
    { 

     //current tab screen title 
     tabBarController?.title = "Manage" 

     //Hide back button or left bar button 
     tabBarController?.navigationItem.leftBarButtonItem = UIBarButtonItem(title: " ", style: .Plain, target: nil, action: nil) 

     //custom right bar button 
     var image = UIImage(named: "dummy_settings_icon") 
     image = image?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) 
     tabBarController?.navigationItem.rightBarButtonItem = UIBarButtonItem(image: image, style: UIBarButtonItemStyle.Plain, target: self, action: "settingButtonAction") 
    } 

    func settingButtonAction() 
    { 
     print("Setting Button tapped") 
     performSegueWithIdentifier("loadAccountSettingsSegue", sender: nil) 

    } 
5

Swift 3.0 Giải pháp:

self.navigationController?.setNavigationBarHidden(false, animated:false) 

     //Create back button of type custom 

     let myBackButton:UIButton = UIButton.init(type: .custom) 
     myBackButton.addTarget(self, action: #selector(ViewController.popToRoot(sender:)), for: .touchUpInside) 
     myBackButton.setTitle("Back".localized(), for: .normal) 
     myBackButton.setTitleColor(.blue, for: .normal) 
     myBackButton.sizeToFit() 

     //Add back button to navigationBar as left Button 

     let myCustomBackButtonItem:UIBarButtonItem = UIBarButtonItem(customView: myBackButton) 
     self.navigationItem.leftBarButtonItem = myCustomBackButtonItem 



func popToRoot(sender:UIBarButtonItem){ 
     _ = self.navigationController?.popToRootViewController(animated: true) 
    } 
Các vấn đề liên quan