UIButton setImage无法处理自定义注释视图

时间:2015-08-03 22:07:33

标签: ios objective-c uibutton

正如标题所说,我在使用setImage类的UIButton方法时遇到问题。

在我的代码中,我成功设置了自定义注释和自定义注释视图,我正在尝试为这些标注添加两个按钮。我可以在右侧的圆圈中添加小“i”,但在左侧没有任何内容,我想要一个带有图像的按钮。

这是我在mapView的viewForAnnotation方法中的代码,其中“pin”是我的自定义注释视图,该视图是使用mapView的dequeueReusableAnnotationViewWithIdentifier方法设置的,并已转换为我的自定义视图,之后会对其进行测试以查看如果是零。

我相信图像的路径是正确的,因为当它与写入的内容不同时,我能够获得有关图像存在的错误消息。另一件事是,当我单击信息按钮或标注上的任何位置时,调用calloutAccessoryControlTapped方法,如何修复在标注上任何位置调用的方法,以及如何区分内部的两个按钮方法

    if(!pin){
        pin = [[CustomAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
        UIButton *buttonInfo = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        [buttonInfo addTarget:nil action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];

         UIButton *buttonCar = [UIButton buttonWithType:UIButtonTypeCustom];
        [buttonCar addTarget:nil action:nil forControlEvents:UIControlEventTouchUpInside];
        UIImage *image = [UIImage imageNamed:@"Images/car.png"];
        if (image) {
            [buttonCar setImage:[UIImage imageNamed:@"Images/car.png"] forState:UIControlStateNormal];

        }
        else{

            NSLog(@"Your image is nil");

        }
        pin.canShowCallout = YES;
        pin.rightCalloutAccessoryView = buttonInfo;
        pin.leftCalloutAccessoryView = buttonCar;
    }

1 个答案:

答案 0 :(得分:0)

这里的问题是你没有设置按钮的框架,这意味着它基本上是不可见的。

尝试这样的事情:

    UIButton *buttonCar = [UIButton buttonWithType:UIButtonTypeCustom];
                        [buttonCar addTarget:nil action:nil forControlEvents:UIControlEventTouchUpInside];

    UIImage *image = [UIImage imageNamed:@"Images/car.png"];
    if (image) {
            [buttonCar setImage:[UIImage imageNamed:@"Images/car.png"] forState:UIControlStateNormal];

    } else {
              NSLog(@"Your image is nil");                      
    }

    buttonCar.frame = CGRectMake(0, 0, image.size.width, image.size.height);

编辑:如果这不起作用且您的日志记录确实说您的图片为零,请尝试以下步骤解决您的问题:

  • 通过在Project Navigator中选择文件并打开右侧的File Inspector窗格,确保您的图像确实包含在您正在构建的目标中。您的目标旁边是否有复选标记? (假设您没有使用资产目录)

  • 检查图像的拼写 - 如果您在设备上进行测试(模拟器更宽容),大写/小写将成为问题。此外,如果图像是捆绑包的一部分,则不应要求图像的完整路径。即只使用[UIImage imageNamed:@"car.png"]