使用 customView 时 UINavigationBarButton 不起作用

UINavigationBarButton not working when using customView

我想制作一个包含图像和文本的自定义 UIBarButtonItem,并自定义(缩小)UIButton 点击​​区域。为了以编程方式实现这一点,我使用了以下代码片段。但是当作为子视图添加到 UIView 中时,UIButton 消失了。有人可以指导我出了什么问题吗? 为了减少条形按钮的点击区域,我在自定义 UIView 中嵌入了自定义 UIButton。

//Set Navigation Bar
UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 64)];

//Set title if needed
UINavigationItem * navTitle = [[UINavigationItem alloc] init];
navTitle.title = @"";
UIView *customBackView = [[UIView alloc] initWithFrame:CGRectMake(220,0,50,40)];
customBackView.backgroundColor = [UIColor clearColor];

//Here you create info button and customize it
UIButton * tempButton = [UIButton buttonWithType:UIButtonTypeSystem];
tempButton.frame=CGRectMake(240,2,40,40);
[tempButton setImage:[UIImage imageNamed:@"offline_bk.png"]
         forState:UIControlStateNormal];

//Add selector to info button
[tempButton addTarget:self action:@selector(onTapDone:) forControlEvents:UIControlEventTouchUpInside];
[customBackView addSubview:tempButton];
[customBackView bringSubviewToFront:tempButton];
UIBarButtonItem * infoButton = [[UIBarButtonItem alloc] initWithCustomView:customBackView];

//In this case your button will be on the right side
navTitle.rightBarButtonItem = infoButton;

//Add NavigationBar on main view
navBar.items = @[navTitle];
[self.view addSubview:navBar];

因为您的临时按钮超出了自定义后视图的界限。您将 y 原点值设置为 2,将 x 原点值设置为 240,这会导致按钮超出自定义后视图的范围。

试试这个代码:

 UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 64)];

    //Set title if needed
    UINavigationItem * navTitle = [[UINavigationItem alloc] init];
    navTitle.title = @"";
    UIView *customBackView = [[UIView alloc] initWithFrame:CGRectMake(0,0,50,50)];
    customBackView.backgroundColor = [UIColor clearColor];

    //Here you create info button and customize it
    UIButton * tempButton = [UIButton buttonWithType:UIButtonTypeSystem];
    tempButton.frame=CGRectMake(4,2,40,40);
    [tempButton setImage:[UIImage imageNamed:@"offline_bk.png"]
                forState:UIControlStateNormal];

    //Add selector to info button
    [tempButton addTarget:self action:@selector(onTapDone:) forControlEvents:UIControlEventTouchUpInside];
    [customBackView addSubview:tempButton];
    [customBackView bringSubviewToFront:tempButton];
    UIBarButtonItem * infoButton = [[UIBarButtonItem alloc] initWithCustomView:customBackView];

    //In this case your button will be on the right side
    navTitle.rightBarButtonItem = infoButton;

    //Add NavigationBar on main view
    navBar.items = @[navTitle];
    [self.view addSubview:navBar];
    [self.view bringSubviewToFront:navBar];