我想询问是否有办法将图像添加到资源组中文件夹的单元格中。
我有很多类别..对于每个类别:“Barvy”,“Budovy”里面有.jpg图像。
我需要一个带有这些组名称的集合视图,点击单元格后我需要在文件夹中显示所有图像,例如..我的应用程序加载,我可以看到4个单元格,每个都有标题:Barvy,Budovy,Bytove_doplnky, Casove_pasmo ..点击单元格后,它将从文件夹中加载图像
答案 0 :(得分:1)
您的图像在捆绑文件中,因此您可以直接使用图像名称[UIImage imagedNamed : @"<name.png>"]
来使用图像。您有包含多个图像的文件夹,以便显示这些图像:
为所有四个文件夹创建包含此图像名称的数组,如NSArray *arrBravy = @[@"Bravy_cool.png", @"Bravy_angry.png" ... ];
。并在collectionView
cell.imgView.image = arrImages[indexPath.row];
arrImages = arrBravy or arrBudovy... etc , as per the condition user clicked on which option.
但正如你所说,你有许多文件夹,所以你不能管理多个数组,所以为了解决这个问题,你制作一个json文件并将其添加到你的包中。现在对此json文件应用序列化,您将获得所有文件的列表名称。
json文件的建议模式:
{
{
"folderName": "Bravy",
"imgList": [ "Bravy_cool", "Bravy_angry", "Bravy_OK"]
},
{
"folderName": "Budovy",
"imgList": [ "Budovy_kiss", "Budovy_sleep", "Budovy_cry"]
}
}
我刚给你两个文件夹名称的例子,你可以将它扩展到你的使用。保持json是解决此类问题的最佳方法。
如何与JSON交易
获取json数据:
NSArray *arrJson = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &e];
为图像分配Json
//userSelectedString is string which notifes user selected which folder
for(int i= 0; i< arrJson.count: i++){
if(arrJson[i][@"folderName"] == @"userSelectedString"){
arrImages = arrJson[i][@"imgList"];
}
}
在collectionview ItemFor Row中
cell.imgView.image = arrImage[indexPath.row];
如果您有XML,那就没关系!你可以像json数据一样处理xml,但有点不同。
如果您想要获取XML文件,请参阅本教程:https://www.raywenderlich.com/725/xml-tutorial-for-ios-how-to-read-and-write-xml-documents-with-gdataxml
如果您想将XML转换为Json,请使用此在线转换器并下载您的文件:http://www.utilities-online.info/xmltojson/#.WFTDfuZ97IU
如何在UICOLLECTIONVIEW中显示图像
首先写下这个
@interface myViewController : UIViewController {
//BOOL isFolderSelected;
NSMutableArray *arrMutImages;
}
ViewDidLoad
中的
arrMutImages = [NSMutableArray New];
[arrMutImages addObject:[self getFolderNames]];
制作新方法
- (NSMutableArray *) getFolderNames{
NSMutableArray *arrMutfetchImage = [NSMutableArray New];
for(int i=0 ; i < arrJson.count ; i++){
[arrMutfetchImage addObject:arrayJson[i][@"folderName"]]
}
return arrMutfetchImage;
}
numberOfItemsInSection
中的
return arrMutImages.count;
cellforrowatindexpath
中的
imageView.image = [UIImage imageNamed: arrMutImages[indexPath.row]];
didSelectItemAtIndexPath
中的
[arrMutImages removeAllObjects];
[arrMutImages addObject:arrayJson[indexPath.row][@"ImgList"]];
[collectionView reloadData];
如果有任何按钮从图像列表切换到文件夹,则在按钮操作中写下代码
[arrMutImages removeAllObjects];
[arrMutImages addObject:[self getFolderNames]];
[collectionView reloadData];
答案 1 :(得分:0)
首先按升序重命名所有组的图像以及像'Barvy_0.jpg'这样的组名等等。
然后声明一个空白字符串,如:
var image_name:String = ""
然后在按钮点击时将image_name设置为组名称,例如在Barvy按钮上单击:
image_name = "Barvy"
在collectionview中:
cell.imageview.image = UIImage(named:"\(image_name)\(indexPath.row).png")!
答案 2 :(得分:0)
这就是我解决显示前两组图像的方法
我写了一个json文件并将他添加到我的项目中
{
"Barvy": [ "Bila.jpg", "Cerna.jpg", "Cervena.jpg",
"Fialova.jpg", "Hneda.jpg", "Modra.jpg",
"Oranzova.jpg", "Zelena.jpg", "Zluta.jpg"],
"Budovy": [ "Budova.jpg", "Cirkus.jpg", "Domov.jpg",
"Dum.jpg", "Kostel.jpg", "Nemocnice.jpg",
"Obchod.jpg", "Restaurace.jpg", "Skola.jpg"]
}
然后
var arrImages = [String]()
let dataUrl = Bundle.main.url(forResource: "test", withExtension: "json")
override func viewDidLoad() {
super.viewDidLoad()
collectionView.dataSource = self
collectionView.delegate = self
let jsonData = try! Data(contentsOf: dataUrl!)
do {
if let arrJson = try JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers)
as? Dictionary<String, AnyObject> {
if let barvy = arrJson["Barvy"] as? [String] {
arrImages = barvy
}
if let budovy = arrJson["Budovy"] as? [String] {
arrImages += budovy
}
}
} catch {
print(error)
}
}
和
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TestCell", for: indexPath) as? Cell {
cell.imgView.image = UIImage(named: "\(arrImages[indexPath.row])")
return cell
}
return UICollectionViewCell()
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return arrImages.count
}
最后,前两组的图像显示在collectionView中.. 当我弄清楚如何首先只显示类别名称和点击显示图像时,我会更新答案。