循环从 viewDidLoad 上的文档目录设置 UIImages
Posted
技术标签:
【中文标题】循环从 viewDidLoad 上的文档目录设置 UIImages【英文标题】:loop to set UIImages from document directory on viewDidLoad 【发布时间】:2014-01-09 09:35:49 【问题描述】:我有 9 个按钮,其图像由用户动态设置。每个按钮的当前图像保存在用户文档文件夹中。在viewDidLoad
id 喜欢将每个图像重新设置为它的 UIButton。
我可以很容易地做到这一点:
NSString *filePath = [self documentsPathForFileName: @"boss1.png"];
NSData *pngData = [NSData dataWithContentsOfFile:filePath];
UIImage *savedBoss = [UIImage imageWithData:pngData];
[boss1Button setImage:savedBoss forState:UIControlStateNormal];
...... 8 more times....
当然我更喜欢使用循环。只是,我不确定在目标 C 中会是什么样子。在 jQuery 中,我可以执行以下操作:
$('.bosses').each(function( index )
var imageUrl='../images/boss'+(index+1)
$('#'+this.id).css('background-image', 'url(' + imageUrl + ')')
);
如何创建类似的 objective-C
循环,以类似地增加老板图像名称和按钮名称?
此外,有没有更好的方法来完全做到这一点?
我觉得可能有一个 NSArray
的图像 url 和一个 NSArray 的 UIButton
名称并使用循环将它们配对在一起可能会更好......但我再次不确定语法会是什么样子在这里。
【问题讨论】:
【参考方案1】:像这样尝试,并拥有像 1 到 8 这样的按钮标签
for (id subview in self.view.subviews)
if([subview isKindOfClass:[UIButton class]])
UIButton* button = (UIButton*)subview;
NSString *filePath = [self documentsPathForFileName:[NSString stringWithFromate@"boss%d.png", button.tag]];
NSData *pngData = [NSData dataWithContentsOfFile:filePath];
UIImage *savedBoss = [UIImage imageWithData:pngData];
[button setImage:savedBoss forState:UIControlStateNormal];
这样就可以了。
【讨论】:
现在正在处理,isKindaOfClass
应该是isKindOfClass
,对吧?
假设您已经在视图中添加了按钮,这将起作用。
我印象深刻的是你没有自动完成就这么关闭了!看起来stringWithFormat
有点偏离,已修复(我认为)但仍然抛出 "Expected ']' ` NSString *filePath = [self documentsPathForFileName:[NSString stringWithFormat@"boss%d.png", button.tag]] ;`
是的@Joshua,如果他需要添加按钮,你已经向他展示了一种方式:)
@Joshua 是的,他们是在故事板中设置的【参考方案2】:
会是这样的:
//Add all the buttons in an array for easy loop
NSArray *array = @[btn1,btn2,btn3,btn4... etc];
NSString *name = @"BOSS";
int x = 1;
for(UIButton *btn in array) // loop through all the buttons
NSString *filePath = [self documentsPathForFileName:[NSString stringWithFormat:@"%@%d.png",name,x]];
NSData *pngData = [NSData dataWithContentsOfFile:filePath];
UIImage *savedBoss = [UIImage imageWithData:pngData];
[btn setImage:savedBoss forState:UIControlStateNormal];
x++;
【讨论】:
完美,不得不改变“老板”的大小写,但正是我需要的,而且非常易读,谢谢!以上是关于循环从 viewDidLoad 上的文档目录设置 UIImages的主要内容,如果未能解决你的问题,请参考以下文章
如果我有一个过滤搜索结果的 UITableView,如何将 ViewDidLoad() 上的 IndexPath 设置为常量,即使在搜索时也是如此