在导航栏按钮项中添加自定义图像时丢失 Segue 操作

Posted

技术标签:

【中文标题】在导航栏按钮项中添加自定义图像时丢失 Segue 操作【英文标题】:Losing Segue Action when adding custom image in navigation bar button item 【发布时间】:2013-08-02 12:59:13 【问题描述】:

我正在使用 Storyboards 开发应用程序。 在一个 ViewController 中,我在 navigationBar 上有一个链接到第二个 ViewController 的按钮。这个transiction在storyboard中定义(在这个例子中我定义了一个push segue来链接两个ViewControllers)

我已经更改了this post in ***之后的按钮图片。

但问题是:按钮视图的更改破坏了我在情节提要中定义的 push segue。所以问题是:如何在不终止 segue 动作的情况下仍然改变 BarButton 的背景?

我不想使用performSegueWithIdentifier 以编程方式重置segue。这没有意义,因为我已经在故事板上定义了它,所以我认为这必须是另一种解决方案。

【问题讨论】:

您能发布一些您的自定义 barButton 图像代码吗?您的 barButton 是否在情节提要中初始化?还是全部用代码创建? 您尝试过建议的答案吗? 【参考方案1】:

我认为这将是您最好的解决方案:

viewDidLoad:

self.navButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.navButton.frame = CGRectMake(0, 0, 30, 30);
[self.navButton setImage:[UIImage imageNamed:@"yourImage"] forState:UIControlStateNormal];
[self.navButton addTarget:self action:@selector(yourNavButtonAction) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *logOutBarButton = [[UIBarButtonItem alloc] initWithCustomView:self.navButton];

[self.navigationItem setRightBarButtonItems:[NSArray arrayWithObject:navButton, nil]];

在处理您的导航按钮点击的方法中(yourNavButtonAction 从上方)

[self performSegueWithIdentifier:@"yourSegueIdentifier" sender:self];

**请注意,这将要求您创建一个源自 ViewController 本身的故事板转场,而不是该 ViewController 上的按钮。控制从 ViewController 到目标 ViewController 的拖动,给生成的 segue 一个标识符(上面的 yourSegueIdentifier),然后你就设置好了。

【讨论】:

【参考方案2】:

您不能同时使用引用的代码和 segue。代码引入了一个新对象,即获得点击的UIButton,因此您的情节提要对象将不再获得点击。

您可以尝试在情节提要中添加标准自定义UIButton 并将代码更改如下:

// instead of 
UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg];

// use
_someButton.frame = frameimg;

假设您的 _someButton 是故事板中按钮的 IBOutlet 的名称。

如果这不起作用,您应该使用performSegueWithIdentifier。我也看不出这有什么问题。无论如何,您在自定义UIButton 中包含@selector。只需使用它来启动segue。您仍然可以在情节提要中配置 segue 等,因此不会丢失任何内容,对吗?事实上,上面的重构似乎需要更多的工作。

【讨论】:

以上是关于在导航栏按钮项中添加自定义图像时丢失 Segue 操作的主要内容,如果未能解决你的问题,请参考以下文章

将自定义 BarButtonItem 添加到顶部导航栏

从自定义导航栏展开 segue 后,如何切换回默认导航栏外观?

Swift 自定义导航项

导航栏中的 Swift 自定义后退按钮

“导航项中不支持普通样式”警告我的自定义条形按钮项

iOS 导航栏-返回按钮-自定义