2010-12-14 3 views
1

У меня есть это табличное представление в моем приложении, которое имеет определенное имя элемента, такое как «Apple». Когда пользователь нажимает на этот выбранный элемент, они направляются в detailView, который просматривает изображение и описание этого выбранного элемента. Я думал использовать plist's, чтобы сделать это, но я не знаю, как это сделать. Пожалуйста, помогите мне.Использование plist в DetailView

Я посмотрел на некоторые источники, такие как iCodeBlog, но они не очень хорошо объясняют извлечение и сохранение. Возможно, вы также можете дать ссылку на некоторые ссылки, которые описывают это лучше.

Heres plist, который я пробовал. У каждого из элементов (Orange, Apple) есть данные, которые я хочу отобразить в моем detailView. Я в основном хочу отобразить показанные данные.

alt text

+0

Может ли вы предоставить более подробную информацию? Что вы имеете в виду, используя плиты для этого? – ughoavgfhw

+0

Только что заметил опечатку в моем последнем комментарии. Я имел в виду плиты, а не щели. – ughoavgfhw

+0

Я отредактирую свой вопрос. – Souljacker

ответ

2

Вот пример контроллера представлений, который будет делать то, что вы хотите. Я назвал класс DetailViewController и загрузил plist из Details.plist в ресурсы приложения. Изображения также находятся в ресурсах приложения.

DetailViewController.h

#import <UIKit/UIKit.h> 
@interface DetailViewController : UIViewController { 
    UILabel *description; 
    UIImageView *imageView; 
    NSString *selectedItem; 
} 
@property (nonatomic, retain) IBOutlet UILabel *description; 
@property (nonatomic, retain) IBOutlet UIImageView *imageView; 
@property (nonatomic, copy) NSString *selectedItem; 
@end 

DetailViewController.м

#import "DetailViewController.h" 
@implementation DetailViewController 
@synthesize description, imageView, selectedItem; 

- (void)viewDidLoad { 
    NSDictionary *details = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Details" ofType:@"plist"]]; 
    details = [details objectForKey:self.selectedItem]; 
    self.description.text = [details objectForKey:@"description"]; 
    self.imageView.image = [UIImage imageNamed:[details objectForKey:@"image"]]; 
} 
@end 

Тогда все, что вам нужно сделать, это обновить свойство SelectedItem перед загрузкой вида и создать файл NIB с точкой зрения описания этикетки и изображений, прикрепленным к их торговым точкам.

+0

Как я могу точно изменить свойство selectedItem? – Souljacker

+0

спасибо, это было довольно просто – Souljacker

0

Создание массива в PLIST с количеством элементов, которое равно количеству строк. Создайте строку под названием description и строку с именем image в каждом элементе. Получите номер выбранной строки в методе didSelectRowAtIndex:. Храните словарь в NSDictionary

[myDictionary initWithDictionary:[myArray objectAtIndex:indexPath.row]]

Тогда получите и строку описания imagestring по телефону

[myDictionary objectForKey:@"image"]

и передать эти строки в подробном представлении.

1

Пройдите NSString до подробного просмотра и загрузите элемент на основе NSString. Это может быть конкретное имя словаря или элемент в массиве.

newDetailViewController.currentItem = @"Array1"; 

и на мой взгляд, деталь, определить:

.h 
    NSString *currentItem; 
    @property(nonatomic,retain) NSString *currentItem; 
.m 
    @synthesize currentItem; 

Теперь currentItem в контроллере DetailView будет "Array1", так это то, что мы перешли к нему.

Все зависит от того, как настроен ваш plist, используете ли вы NSArray, NSDictionary?

Есть много способов, вы можете поместить это использовать:

NSString *current = [NSString stringWithFormat:@"%@/%@",appDocsPath,currentItem]; 
    NSMutableDictionary* dict = [[[NSMutableDictionary alloc] initWithContentsOfFile:current] autorelease]; 

Кроме того, здесь приведен пример передачи данных из tableView в detailViewLoading Detail View

EDIT ОТ ВОПРОСА: Используя приведенный выше пример:

aLabel.text = [dict [email protected]"description"]; 
1

Plists действительно полезен для многих случаев:

+ (NSMutableDictionary*) containerDictionary { 

    NSString *path = [[NSBundle mainBundle] bundlePath]; 
    NSString *finalPath = [path stringByAppendingPathComponent:@"ContainerGraphics.plist"]; 
    NSMutableDictionary *plistData = [NSMutableDictionary dictionaryWithContentsOfFile:finalPath]; 

    return plistData; 

} 

Это загружает Plist файл (Список недвижимости) под названием "ContainerGraphics.plist" из моего приложения пачки.

Файл plist на самом деле представляет собой только XML-файл. Вы можете построить его в Xcode, выбрав «новый файл» -> «ресурс» -> «Список свойств».

Вы на самом деле не сказать, что это вы не понимаете, так что если есть что-то конкретное, что вы найдете трудно понять, пожалуйста, подробно :)

EDIT:

С PLIST вы post, используйте мой вышеприведенный подход для загрузки файла plist. Тогда это NSDictionary из NSDictionaries ..

Таким образом, чтобы в словарь «Apple» вы идете:

NSDictionary *appleDictionary = [plistData objectForKey:@"Apple"]; 

Это означает что-то вместе - войти в список и получить «Apple» словарь.

Теперь, чтобы получить изображение и описание значения, которые вы бы пойти:

NSString *imagePath = [appleDictionary objectForKey:@"image"]; 
NSString *descriptionString = [appleDictionary objectForKey:@"description"]; 

То есть довольно много, что есть к этому.

Если у вас есть таблицаView, которая должна быть заполнена этими данными, есть улов! Данные в NSDictionary не имеют порядка. Поэтому вы не можете просто ссылаться на [dictionary objectAtIndex: indexPath.row], как это было бы с массивом данных для tableView.

Что вы делаете, так это сначала получить plistData, как в моем первом примере. (сделайте это в поле зренияDidLoad). Затем вы извлекаете все ключи из словаря plistData - обратите внимание, что «верхний словарь специфичен», «Яблоко», «Оранжевый» и т. Д., А не значения, которые вы хотите скопировать в свое приложение. Но, словари внутри этих словарей вообще, изображение, описание ...

Итак:

NSArray *allKeys = [plistData allKeys]; 

массив allKey теперь содержит ключи (Apple, Orange и т.д.), чтобы добраться до NSDictionaries в plistData.

В методе cellForRowAtIndexPath теперь вы можете пойти:

NSDictionary *dictionaryForCurrentCell = [plistData objectForKey:[allKeys objectAtIndex:indexPath.row]]; 
[cell.textLabel setText:[dictionaryForCurrentCell objectForKey:@"image"]]; 
[cell.detailLabel setText:[dictionaryForCurrentCell objectForKey:@"description"]]; 

Надеется, что это помогает :)

Смежные вопросы