我正在使用Storyboard开发一款应用。 在一个ViewController中,我在navigationBar上有一个链接到第二个ViewController的按钮。这个转录是在故事板中定义的(在这种情况下,我已经定义了一个push segue来链接两个ViewControllers)
我在this post in Stackoverflow之后更改了按钮的图像。
但问题是:按钮视图中的更改会破坏我在故事板中定义的推送segue。所以问题是:如何在不杀死segue动作的情况下仍然改变BarButton的背景?
我不想使用performSegueWithIdentifier
以编程方式重置segue。这没有任何意义,因为我已经在故事板上定义了它,所以我认为这必须是另一种解决方案。
答案 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)并设置。