我将要有对象,稍后从包含文件名的.csv(逗号分隔文件)中读取。这就是我为什么要这样做的原因。
我想要完成的是让按钮从csv中的文件名中获取图像。
到目前为止我尝试了什么: 对象:
@interface question : NSObject
{
@private
UIImage *imageName;
}
@property (nonatomic, retain)UIImage *imageName;
(我已尝试使用NSString以及UIImage,但它的工作方式都不像我想要的那样)
的ViewController:
- (void)viewDidLoad
{
[super viewDidLoad];
question *question1 = [[question alloc]init];
[question1.imageName initWithContentsOfFile:@"Default.png"];//Will be read from a csv later on, just typing it in manually for a test
testImage = question1.imageName;
}
-(void)imageshow
{
//(UIImage *)testImage;(NSString *)imageNameString; Didnt work
//[self.testImage initWithContentsOfFile:@"%@",questiont.imageName]; - Doesnt work either
[testButton setImage:testImage forState:UIControlStateNormal];
}
-(IBAction)test:(id)sender
{
[self imageshow];
}
此代码失败的地方是当我按下测试按钮时,没有任何反应(不会崩溃)
我该如何正确地做到这一点? (将带有文本文件名的图像添加到NSObject,然后在按钮/图像视图中显示)
答案 0 :(得分:1)
question1.img = [UIImage imageNamed:@"Default.png"];
[testButton setImage:question1.img forState:UIControlStateNormal];
是的,您可以尝试以下动态图像
question1.img = [UIImage imageNamed:[NSString stringWithFormat:"%@",imgName]];
imgName =>是图像的名称而不是图像 例如:“abc.png”或“123.png”等
答案 1 :(得分:1)
如果您的属性名为imageName
,则访问者变量自动命名为_imageName
。
您在代码中使用了两个不同的变量。
@interface question : NSObject
{
@private
UIImage *_imageName;
}
@property (nonatomic, retain)UIImage *imageName;
imageName对于包含图片的属性来说不是一个很好的名称..它最适合字符串。
答案 2 :(得分:1)
有些事情需要改变。
仅仅是传统的原因,在开头用大写字母写所有的类名。它简化了阅读,在论坛中进行交流,避免了错误。 第二个名称变量,无论是说话还是抽象,最好是说。但是不要选择像imageName这样的误导名称。该变量中应该有一个名称,而不是图像,或者可能是显示名称的图形。 :)
imageWithContentsOfFile
需要完全限定的文件名。如果"Default.png
“是您的边界的一部分,正如我猜的那样,那么imageNamed:@"Default.png"
会这样做。
你的setImage
看起来很不错。当你的图像是(null)
时,它当然无法工作。但是,此时直接访问iVar并不是一件好事。你应该使用它的setter / getter。改为使用:
[self.testButton setImage:self.testImage forState:UIControlStateNormal];
在你的情况下,它没有太大的区别。但与其他约定类似,当您将代码与您在网络上找到的某些代码或在团队中工作时混合使用时,它有助于避免错误。