【问题标题】:Problem over-riding the Back button in iOS在 iOS 中覆盖后退按钮的问题
【发布时间】:2011-11-12 15:30:00
【问题描述】:

我有一个 UITableViewController A 将 UITableViewController B 推入堆栈。

在 A 我有代码:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Trending" 
                                                                                     style:UIBarButtonItemStylePlain 
                                                                                    target:self 
                                                                                    action:@selector(backButtonClicked:)];

backButtonClicked: 也实现了。

B 的标题是 Trending,但是当我点击它时,它永远不会到达 backButtonClicked:

这是为什么?

【问题讨论】:

  • 你在使用导航控制器吗?
  • 是的,我正在使用 UINavigationController 内部的 UITableViewController

标签: iphone objective-c cocoa-touch uinavigationcontroller uibarbuttonitem


【解决方案1】:

尝试设置委托:

[navigationController setDelegate:self];

或者使用左键。有时后退按钮不适用于某些视图,我不得不改用左按钮:

self.navigationItem.leftBarButtonItem =  [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];

另外,您可以尝试设置 B 的按钮项而不是 A:

viewControllerB.navigationItem.backBarButtonItem =  [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];

【讨论】:

  • 设置代理没有做任何事情,更改为 leftbarbuttonitem 不再更改标题也不会执行选择器:(
  • 尝试设置 B 视图控制器 backBarButtonItem:viewControllerB.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)]
【解决方案2】:

不要尝试使用 backBarButtonItem,而是尝试使用 leftBarButtonItem

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];
self.navigationItem.hidesBackButton=YES;

对我来说,它就像一个魅力。并且不要忘记您没有释放此按钮 - 它可能会导致内存泄漏。因此,您可以在分配按钮或使其像这样时添加自动释放

UIBarButtonItem *myBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];
self.navigationItem.leftBarButtonItem = myBackButton;
[myBackButton release];
self.navigationItem.hidesBackButton=YES;

【讨论】:

    【解决方案3】:

    在 Xcode 文档中,它声明 backBarButtonItem 目标和操作应设置为 nil。因此,即使您确实设置了它,它也可能会被忽略。您可以查看下面的链接以将自定义行为添加到后退按钮。

    Custom Action on Back Button Item

    或者您可以在 viewControllerB 中执行以下操作:

    self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Trending" 
                                                                                 style:UIBarButtonItemStylePlain 
                                                                                target:self
                                                                                action:@selector(backButtonClicked:)] autorelease];
    

    然后也将这个添加到 viewControllerB

    - (void)backButtonClicked:(id)sender {
    
        [[[self.navigationController viewControllers] objectAtIndex:0] backButtonClicked:sender];
    
        [self.navigationController popViewControllerAnimated:YES];
    
    }
    

    上述方法将找到 RootViewController 并向其发送 backButtonClicked 消息。然后它将弹出当前视图控制器,这应该允许您模拟 backBarButtonItem。您还可以通过更改 objectAtIndex 方法中的值来更改要发送消息的视图控制器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多