0

我正在使用 Storyboards 开发应用程序。在一个 ViewController 中,我在 navigationBar 上有一个链接到第二个 ViewController 的按钮。这个转换是在故事板中定义的(在这种情况下,我定义了一个 push segue 来链接两个 ViewController)

在 Stackoverflow 中的这篇文章之后更改了按钮的图像。

但问题是:按钮视图的变化打破了我在情节提要中定义的推动序列。所以问题是:如何在不杀死segue动作的情况下仍然改变BarButton的背景?

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

4

2 回答 2

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

在处理您的 navButton 水龙头的方法中(yourNavButtonAction从上面)

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

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

于 2013-08-02T14:08:55.360 回答
1

您不能同时使用引用的代码和使用 segue。代码引入了一个新对象,一个UIButton获得点击的对象,因此您的故事板对象将不再获得它。

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

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

// use
_someButton.frame = frameimg;

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

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

于 2013-08-02T13:41:21.373 回答