在导航栏按钮项中添加自定义图像时丢失 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 操作的主要内容,如果未能解决你的问题,请参考以下文章