代码之家  ›  专栏  ›  技术社区  ›  mrueg

自定义UIBarButtonItem的较小活动区域

  •  5
  • mrueg  · 技术社区  · 16 年前

    我有一个带有自定义UIBarButtonItem(它使用UIButton作为其自定义视图)的UINavigationBar。问题是:自定义按钮的活动区域太大,如果我点击按钮外至少40个像素,它仍然会注册为点击按钮。这会导致意外的抽头。如何减少这些按钮上的活动区域?

    3 回复  |  直到 16 年前
        1
  •  6
  •   just.jimmy    13 年前

    我也注意到了这种奇怪。我发现使用容器UIView可以解决这个问题。例如:

    UIButton *menuButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
    [menuButton addTarget:self action:@selector(revealMenu:) forControlEvents:UIControlEventTouchUpInside];
    [menuButton setImage:[UIImage imageNamed:@"menuIcon"] forState:UIControlStateNormal];
    UIView *menuButtonContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
    [menuButtonContainer addSubview:menuButton];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:menuButtonContainer];
    
        2
  •  0
  •   Raviraja    16 年前

    我想你还没有改变自定义按钮的大小。。。 试着这样做。。。 在Interface builder中,选择要缩小活动区域的按钮,然后按“Command+3”或“tools-->Size inspector”以缩小“W”和“H”值。。。 这将使自定义按钮更小,因此活动区域也会减少。。。

    ~Raviraja

        3
  •  0
  •   Joey    16 年前

    您是通过Interface Builder添加按钮还是以编程方式添加按钮?无论哪种方式,都可以使用这行代码设置图像的边界:

    yourButton.bounds = CGRectMake( 0, 0, yourImage.size.width, yourImage.size.height );  
    

    如果您想要一个完整的示例,下面是我在我的一个应用程序中使用的示例:

        UIImage *image = [UIImage imageNamed:@"audio-off.png"];
        UIButton *myMuteButton = [UIButton buttonWithType:UIButtonTypeCustom];
        myMuteButton.bounds = CGRectMake( 0, 0, image.size.width, image.size.height );    
        [myMuteButton setImage:image forState:UIControlStateNormal];
        [myMuteButton addTarget:self action:@selector(mute) forControlEvents:UIControlEventTouchUpInside];    
        UIBarButtonItem *myMuteBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myMuteButton];   
        navBar.leftBarButtonItem = myMuteBarButtonItem;
        [myMuteBarButtonItem release];