UIToolbarButton 上的 TapGestureRecognizer 不起作用

Posted

技术标签:

【中文标题】UIToolbarButton 上的 TapGestureRecognizer 不起作用【英文标题】:TapGestureRecognizer on UIToolbarButton doesn't work 【发布时间】:2014-09-11 05:45:39 【问题描述】:

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

我的代码:

- (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 上。

【问题讨论】:

为什么不直接使用 UIBarButton 项的 image 属性,而不是在条形按钮内放置一个 UIButton? 如果我使用图像属性,图像不显示 只显示 Tint 颜色 真的吗?这个对我有用。确保您的图片尺寸合适。 图片尺寸为 87X82 像素 【参考方案1】:

听起来您只是想从一个视图控制器导航到另一个。只需从您的条形按钮项控制拖动到您想要在情节提要中导航到的视图控制器。然后,单击两个视图控制器之间的 segue 并在属性检查器中设置其标识符。之后,你需要做的就是实现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;
        
    

在当前视图控制器中打开一个新的视图控制器有点奇怪。为什么不坚持下去呢?

另一种选择是分配初始化 UIView 而不是视图控制器,只需 addSubview:

【讨论】:

【参考方案2】:

首先,您可以使用带有Custom 样式和setter Image 属性的默认UIBarButton 项目,而不是创建UIButton

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

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

【讨论】:

- (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 = 新图像; // btnNewImage.tintColor = [UIColor clearColor]; 您不需要这些技巧来为按钮提供图像。您可以从 IB 设置它们:evernote.com/shard/s42/sh/6abdad17-b29f-46ac-83fb-729d5324075f/… 之后确保您已将操作连接到插座:evernote.com/shard/s42/sh/17fa6e99-9d0a-4ee2-af63-e64934ae362a/… 当您按下按钮时,您的方法 btnNowPlaying 是否被调用? 如果没有,更详细的答案如何将 IBAction 连接到按钮在这里:***.com/questions/3419168/…

以上是关于UIToolbarButton 上的 TapGestureRecognizer 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UIToolbarbutton 的图标应该是啥尺寸?

六种手势

SceneKit 移动相机

如何获取“位置”UIToolbar 按钮?

ios怎么判断我点击的哪个视图

教你30秒去掉图片上的遮挡方法,怎么把照片上的遮挡物去掉!