Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 什么';我的复选框怎么了?_Iphone - Fatal编程技术网

Iphone 什么';我的复选框怎么了?

Iphone 什么';我的复选框怎么了?,iphone,Iphone,我构建了一个UIButton子类,它是一个非常基本的复选框。一切正常(例如,我正在获取我期望的事件,当我期望时调用drawRect方法,等等),但我的图像没有绘制。我已经检查过我的图像不是零,并且我的图像是不同的 代码: 在绘制“img”之前检查其值: Printing description of img: <UIImage: 0x52a710> (gdb) continue Printing description of img: <UIImage: 0x52a5d0&g

我构建了一个UIButton子类,它是一个非常基本的复选框。一切正常(例如,我正在获取我期望的事件,当我期望时调用drawRect方法,等等),但我的图像没有绘制。我已经检查过我的图像不是零,并且我的图像是不同的

代码:

在绘制“img”之前检查其值:

Printing description of img:
<UIImage: 0x52a710>
(gdb) continue

Printing description of img:
<UIImage: 0x52a5d0>
img打印说明:
(gdb)继续
img的打印说明:
背景图像正在NIB中设置。如果我在IB中更改所选状态,我会看到正确的图像显示出来。我还从调用中获取了一个有效的映像(如果我尝试获取imageForState,则不会获取该映像,因为它未在NIB中设置)

这个子类的原因是我需要一个复选框。UIButton并没有做到这一点,而且UISwitch对于所有人来说都是丑陋的,除了最实用的观点

想法

谢谢

tj


编辑:添加了子类的所有代码

您在哪里设置backgroundImageForState?你确定这是正确的图像吗?iPhone操作系统可能会默认为您提供一个透明(空白)图像

其次,我不会使用传入的“rect”参数来绘制图像。这只是告诉你它想要你重新绘制的区域,不一定是其他任何东西。改用

CGRectMake(0,0,img.size.width,img.size.height)

或者类似的东西


最后,你为什么要做自定义绘图?我做了一些非常类似的事情,您完全不需要子类化和实现
drawRect
。UIButton内置了一组极其丰富的图像选项,包括“突出显示”和“选定”图像,这些图像将通过用户交互自动绘制。让我们知道您需要完成什么。

仅仅因为UIImage不是nil并不意味着它包含图像数据

检查文件名的大小写。
我已经做过好几次了:

@“CheckBox.png”和@“CheckBox.png”是iPhone的两个不同名称

看起来你也在做一些不成熟的优化

对于我的第一个选择,我不会深入到drawRect

使用UIButton子类(您只需要子类来跟踪状态)。在IB中设置按钮,并将其放置在需要的位置。将按钮连接到下面的方法,只需在单击时交换图像:

- (IBAction)toggle:(id)sender{

    MyButtonSubClass *aButton = (MyButtonSubClass*)sender;

    [aButton toggleChecked];

    if(aButton.checked)
        [aButton setImage:checkedImage forState:UIControlStateNormal];
    else
        [aButton setImage:uncheckedImage forState:UIControlStateNormal];


}

您也可以选择不将UIButton子类化并跟踪控制器中的状态

我在上面的问题中添加了关于第一组问题的详细信息。我在模拟器中得到的是我在NIB中设置的默认图像。我认为它来自于将复选框序列化到NIB时,而不是来自我的代码。我已经将代码更改为使用我自己的rect(这与我获得通过的代码相同),但它没有影响它。我还添加了所有代码,这样您就可以了解自定义图形的原因。UIButton不能做我需要它做的事情。顺便说一句,如果它只是我不熟悉的东西,我愿意用更好的方法来做。我基本上需要能够保持“选定状态”,即使用户没有主动点击按钮。
- (IBAction)toggle:(id)sender{

    MyButtonSubClass *aButton = (MyButtonSubClass*)sender;

    [aButton toggleChecked];

    if(aButton.checked)
        [aButton setImage:checkedImage forState:UIControlStateNormal];
    else
        [aButton setImage:uncheckedImage forState:UIControlStateNormal];


}