UIToolbarButton上的TapGestureRecognizer不起作用

问题描述:

我有一个UIToolbarButton,它有一个UIButton来保存图像。现在,当我点击这个UIToolbarButton时,我想在当前视图中打开另一个视图。UIToolbarButton上的TapGestureRecognizer不起作用

我的代码:

- (IBAction)btnNowPlaying:(id)sender 
{ 
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] 
            initWithTarget:self 
            action:@selector(openPlaying:)]; 
    [self.view addGestureRecognizer:tap]; 
} 

- (void)openPlaying:(UIGestureRecognizer *)sender 
{ 
    NewMainViewController *vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"Center"]; 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    UIViewController * npvc = [storyboard instantiateViewControllerWithIdentifier:@"NowPlayingVC"]; 
    [vc.containerView addSubview:npvc.view]; 
} 

这个动作,btnNowPlaying是对的UIButton。

+0

为什么不直接使用UIBarButton项目的图像属性,而不是将UIButton放置在酒吧按钮内? – trevorj 2014-09-11 05:51:47

+0

如果我使用图像属性,图像未显示 – 2014-09-11 05:53:39

+0

只显示色调颜色 – 2014-09-11 05:55:04

这听起来像你只是想从一个视图控制器导航到另一个。只需将控件从您的酒吧按​​钮项拖动到您想要在故事板中导航的视图控制器即可。然后,单击两个视图控制器之间的segue,并在Attributes检查器中设置它的标识符。在此之后,所有你需要做的是落实prepareForSegue:

// In a storyboard-based application, you will often want to do a little preparation before navigation 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"THE_IDENTIFIER_YOU_ENTERED_IN_THE_ATTRIBUTES_INSPECTOR"]) { 
     if ([segue.destinationViewController isKindOfClass:[NEWViewController class]]) { 
      NEWViewController *vc = (NEWViewController *)segue.destinationViewController; 
      // Any preparation you need to do for next view controller 
      vc.someProperty = someValue; 
     } 
    } 
} 

这是一个有点陌生,打开当前视图控制器内一个新的视图控制器。为什么不直接继续呢?

另一种选择是alloc-init一个UIView,而不是视图控制器,只是addSubview:

首先,您可以使用默认的UIBarButton项目和Custom样式和设置图片属性,而不是创建UIButton

您不需要创建额外的手势识别器。如果在Interface Builder中将IBAction与按钮连接起来,则可以将转换代码放入btnNowPlaying方法中。

另一种方法是创建IBOutlet,将其与您的按钮连接并在- (void)viewDidLoad方法中创建UIGestureRecognizer。

+0

尝试....没有运气 – 2014-09-11 06:12:00

+0

- (void)viewDidLoad { [super viewDidLoad]; UIImage * i = [UIImage imageNamed:@“1.png”]; CGSize destinationSize = CGSizeMake(25,25); UIGraphicsBeginImageContext(destinationSize); [i drawInRect:CGRectMake(0,0,destinationSize.width,destinationSize.height)]; UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); btnNewImage.image = newImage; // btnNewImage.tintColor = [UIColor clearColor]; } – 2014-09-11 06:14:35

+0

任何其他方式来解决这个问题? – 2014-09-11 06:33:17