【问题标题】:UIBarButtonItem event handling not workingUIBarButtonItem 事件处理不起作用
【发布时间】:2015-03-31 21:30:17
【问题描述】:

我正在尝试捕捉返回按钮的事件并触发didClickBarButtonnLeft: 方法。

以下代码不起作用:

[self.navigationItem.leftBarButtonItem setTarget:self];
[self.navigationItem.leftBarButtonItem setAction:@selector(didClickBarButtonnLeft:)];

但确实如此:

UIBarButtonItem* barButtonLeft;
 barButtonLeft = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:SIDE_VIEW_BAR_BUTTON]
                                                     style:UIBarButtonItemStylePlain
                                                    target:self
                                                    action:@selector(didClickBarButtonnLeft:)];

    self.navigationItem.leftBarButtonItem = barButtonLeft;

    [self.view setUserInteractionEnabled:YES];

关键是我不想替换默认的后退按钮图标。这两个脚本都在 -(void)viewDidAppear:(BOOL)animated 方法内。

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    我有几件事可以提供帮助。首先,访问navigationItem 上的后退按钮的最佳方式是:

    self.navigationItem.backBarButtonItem
    

    尝试使用它而不是self.navigationItem.leftBarButtonItem,看看是否有任何变化。

    其次,如果您只想检测视图控制器何时从导航堆栈中移除,您可以覆盖viewWillDisappear: 并按如下方式实现:

    - (void)viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear:animated];
        if (self.isMovingFromParentViewController)
        {
            // call your back button pressed method
        }
    }
    

    【讨论】:

    • 这不是事件处理程序。
    • 它仍然会以同样的方式工作。 viewWillDisappear:当您的视图控制器移出屏幕时调用。来自文档: isMovingFromParentViewController “返回一个布尔值,指示视图控制器正在从其父级中删除。”因此,达到了相同的效果。
    • 当然,除非您试图覆盖后退按钮正在执行的操作。在这种情况下,要么尝试我提到的选项 1,要么只是隐藏后退按钮并创建一个看起来像后退按钮的新栏按钮项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 2018-09-22
    • 2012-01-26
    • 2018-12-19
    • 1970-01-01
    相关资源
    最近更新 更多