Gents,我正在尝试将一个图像设置为tableview的页脚。页脚图像需要根据导航栏中的按钮进行更改。 (设计是这样的,导航栏上有两个按钮,当加载屏幕/视图时,页脚中有一个图像,点击其中一个按钮更改它然后点击另一个按钮将其更改回来等等。)
我尝试使用UIImage和@property,然后尝试更改图像并在其上设置框架,但这不起作用(框架未正确设置)。基本上,我想做这样的事情:
[[self table1] setfooterview : [[uiimageview alloc] initwithframe:(CGRectMake (0,0,50,50)] and then I also need to add initwithimage:[UIImage imagenamed :@"hello-1.png"]]
但问题是我不能在同一个语句中做两个init方法。而且我无法创建像UIImageView * hello之类的对象,或者因为我需要在以后的其他方法中使用它(在我处理不同按钮的按下的方法中)。 (稍后,我使用简单的if语句,然后根据按下的按钮在footerview上触发图像)。我的猜测是我可能需要做类似的事情 [[self table1] setfooterview:[[uiimageview alloc] initwithframe :( CGRectMake(0,0,50,50)]然后做一个设定的图像,但我认为因为setimage无效,我可能需要以某种方式投射它我怎么会这样做?
很抱歉语法错误,请忽略所有的语法错误,因为我的mac目前还没有和我在一起,我只是从内存中输入这个,而且我是iOS编程的新手。
答案 0 :(得分:1)
您不需要发送两个init方法。图像和帧都是UIImageView
的属性。 (frame
属性继承自UIView
。)您可以在发送init消息后设置它们。
你可以这样做:
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(...)];
imageView.image = [UIImage imageNamed:@"hello-1"];
self.table1.footerView = imageView;
或者你可以这样做:
UIImageView *imageView = [[UIImageView alloc] initWithImage:
[UIImage imageNamed:@"hello-1"];
imageView.frame = CGRectMake(...);
self.table1.footerView = imageView;
或者你甚至可以这样做:
UIImageView *imageView = [[UIImageView alloc] init];
imageView.frame = CGRectMake(...);
imageView.image = [UIImage imageNamed:@"hello-1"];
self.table1.footerView = imageView;
答案 1 :(得分:0)
没有理由调用两个init方法。 您可以子类化或扩展UIImageView并实现一个允许一次设置框架和图像的新init方法。但你也可以做到以下几点。
UIImageView footerView = [[uiimageview alloc] initwithframe:(CGRectMake (0,0,50,50)];
footerView.image = [UIImage imagenamed :@"hello-1.png"];
[[self table1] setfooterview: footerView];
我刚刚键入的替代方案。这不是QAed,可能不是完美的解决方案,但应该给你一个正确方向的提示。 在.h文件中添加以下两行之一:
- (void) changeFooterImage:(UIImage *) image;
- (void) changeFooterImageNamed:(NSString *)imageName;
在.m文件中添加correspoinding实现:
- (void) changeFooterImage:(UIImage *) image {
if (!self->footerView) {
self->footerView = [[UIImageView alloc] initWithFrame:CGRectMake (0,0,50,50)];
[[self tableView] setTableFooterView: footerView];
}
self->footerView.image = image;
}
- (void) changeFooterImageNamed:(NSString *)imageName{
if (!self->footerView) {
self->footerView = [[UIImageView alloc] initWithFrame:CGRectMake (0,0,50,50)];
[[self tableView] setTableFooterView: footerView];
}
self->footerView.image = [UIImage imageNamed :imageName];
}
然后,您的第三方视图控制器应包含此视图控制器的.h文件。 更加“整洁”和“超出本书”将不会以这种方式直接绑定类。您应该更喜欢在协议中声明此方法然后实现协议,然后在实际调用该方法之前,您可以检查该类是否实现了协议。但我觉得这一切都有点太多新东西了。从这个开始,并在以后实现协议,原则上这是有效的。
答案 2 :(得分:0)
“我无法创建像UIImageView * hello这样的对象,或者其他什么,因为我需要在以后的其他方法中使用它”这是什么意思?
任何方式都可以初始化UIImageView并设置其框架和初始图像,然后再将其分配给footerView。