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

时间:2013-08-02 12:59:13

标签: objective-c interface-builder xib segue

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

我在this post in Stackoverflow之后更改了按钮的图像。

但问题是:按钮视图中的更改会破坏我在故事板中定义的推送segue。所以问题是:如何在不杀死segue动作的情况下仍然改变BarButton的背景?

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

2 个答案:

答案 0 :(得分:1)

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

您可以尝试在故事板中添加标准自定义UIButton,并按如下方式更改代码:

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

// use
_someButton.frame = frameimg;

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

如果这不起作用,您应该使用performSegueWithIdentifier。我也没有看到这个问题。无论如何,您还要使用自定义@selector添加UIButton。只需使用它来启动segue。你仍然可以在故事板中配置segue等,所以什么都不会丢失,对吧?事实上,上面的重构似乎更有用。

答案 1 :(得分: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本身的storyboard segue,而不是ViewController上的按钮。控制从ViewController拖动到目标ViewController,给结果segue一个标识符(上面的yourSegueIdentifier)并设置。