我的项目中有Storyboard。我使用[UIBarButtonItem setCustomView:]
方法来自定义工具栏按钮。例如:
[self setCustomView:[[UIImageView alloc] initWithImage:image]];
现在他们看起来像我需要的那样。但我发现这个方法以某种方式禁用了我为此工具栏项设置的segue。我的意思是,segue在没有它的情况下工作,但是当我尝试使用这种方法进行自定义时,segue不起作用。但为什么呢?
我不想在代码中使用目标操作模式,我相信只能使用Storyboard。
答案 0 :(得分:2)
我一直在尝试配置故事板中的所有segue,但我需要为rightBarButtonItem创建自定义视图。要确保segue仍然有效,只需在设置customView之前添加此行:
[filterButton addTarget:self.navigationItem.rightBarButtonItem.target action:self.navigationItem.rightBarButtonItem.action forControlEvents:UIControlEventTouchUpInside];
这样,您在故事板中设置的segue仍将使用customViews激活。
我的整个自定义按钮代码如下所示:
UIButton *filterButton = [UIButton buttonWithType:UIButtonTypeCustom];
[filterButton setImage:[UIImage imageNamed:@"filter"] forState:UIControlStateNormal];
[filterButton setFrame:CGRectMake(0, 0, 36, 36)];
[filterButton addTarget:self.navigationItem.rightBarButtonItem.target action:self.navigationItem.rightBarButtonItem.action forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.rightBarButtonItem.customView = filterButton;
答案 1 :(得分:1)
我已经尝试了你用相同的结果做了什么 - 图片是正确的但是UIBarButtonItem在按下时没有反应。可能这是一个错误。我的工作如下:
要在storyboard中执行此操作,请在工具栏中添加UIButton。您应该看到故事板通过将UIButton放在UIBarButton中来添加它。在UIButton上添加segue。在故事板中自定义UIButton。在我的应用程序中,我将大小设置为40 x 40.然后在您的代码中使用视图自定义UIButton。以下是将imageView添加到UIButton的代码示例:
[sampleImageView setFrame:CGRectMake(0, 0, 40, 40)];
[swapButton addSubview:sampleImageView];
注意:故事板可能很奇怪将UIButtons添加到工具栏。看起来好像是在一个绑定到导航控制器的工具栏中执行它,它不会让你添加它。我通过在故事板中添加一个虚拟视图控制器,为其添加一个工具栏,然后将UIButton拖到该工具栏中来解决这个问题。 Storyboard将通过将UIButton封装在UIButtonBarItem中来为您创建。然后,您可以将其复制到项目中的所需工具栏,并删除虚拟视图控制器。
还有其他方法可以执行此操作,例如在代码中创建按钮并将其添加到工具栏中。上面的方法可以最小化代码。