2013-12-10 3 views
0

Я новичок в программировании Ios. Я хочу отображать данные с контроллера главного представления в контроллер подробного представления. Я использую шаблон главной детали из xcode. массив деталей работает он показывает детали в этикетке, как всегда я хочу, чтобы отобразить название, а, который хранится в _objects массиве,Как отображать данные из главного представления в контроллер подробных представлений

вот мой код

#import "MasterViewController.h" 

#import "DetailViewController.h" 

@interface MasterViewController() { 
    NSMutableArray *_detailObjects; 
    NSMutableArray *_thumbnailImage; 
} 
@end 

@implementation MasterViewController 
@synthesize _objects; 

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.navigationItem.title= @"Zodiac List"; 

    _objects = [[NSMutableArray alloc] initWithObjects: 
       @"value 1", 
       @"value 2", 
       @"value 3", 
       @"value 4", 
       @"value 5", 
       ,nil]; 
    _detailObjects = [[NSMutableArray alloc] initWithObjects: 
         @"detail of value 1", 
         @"detail of value 2", 
         @"detail of value 3", 
         @"detail of value 4", 
         @"detail of value 5", 
         , nil]; 
    } 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return _objects.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    NSDate *object = _objects[indexPath.row]; 
    cell.textLabel.text = [object description]; 
    return cell; 
} 


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"showDetail"]) { 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     NSMutableArray *object = _detailObjects[indexPath.row]; 
     [[segue destinationViewController] setDetailItem:object]; 
    } 
} 

@end 

деталь работает нормально, как когда я хочу, чтобы отобразить значение 1, значение 2, значение 2 в метке, а .. вот мой детальный вид контроллер код ..

@property (strong, nonatomic) id detailItem; 
@property (strong, nonatomic) id detailItemTitle; 

@property (weak, nonatomic) IBOutlet UILabel *detailDescriptionLabel; 
@property (weak, nonatomic) IBOutlet UILabel *zodiacNameLabel; 

здесь .m файл кода

#import "DetailViewController.h" 
#import "MasterViewController.h" 

@interface DetailViewController() 
- (void)configureView; 
@end 

@implementation DetailViewController 
@synthesize zodiacNameLabel; 


#pragma mark - Managing the detail item 

- (void)setDetailItem:(id)newDetailItem 
{ 
    if (_detailItem != newDetailItem) { 
     _detailItem = newDetailItem; 

     // Update the view. 
     [self configureView]; 
    } 
} 

-(void) setDetailItemTitle:(id)detailItemTitle{ 
    if (_detailItemTitle !=detailItemTitle) { 
     _detailItemTitle = detailItemTitle; 

     [self configureView]; 
    } 
} 

- (void)configureView 
{ 
    // Update the user interface for the detail item. 

    if (self.detailItem) { 
     self.detailDescriptionLabel.text = [self.detailItem description]; 
     // self.zodiacNameLabel.text = [self.] 

      MasterViewController *master = [[MasterViewController alloc] init]; 
      zodiacNameLabel.text = [master._objects objectAtIndex:0]; 
    } 

// if (self.detailItemTitle) { 
//  self.zodiacNameLabel.text = [self.detailItem description]; 
// } 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    [self configureView]; 

// MasterViewController *master = [[MasterViewController alloc] init]; 
// zodiacNameLabel.text = [master._objects objectAtIndex:0]; 

// MasterViewController *master = [[MasterViewController alloc]init]; 
// zodiacNameLabel.text = [master._objects objectAtIndex:0]; // you can get first element of an array 

} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 
+0

Ваш синтаксис неверен - в согласии вы не выполняете '@synthesize _objects;'. Ваше начальное свойство будет просто «объектом», и когда вы его синтезируете, вы выполняете '@synthesize object = _object;' и мы хотим знать, что такое '_object'? Пожалуйста, поделитесь всем своим кодом. – Popeye

ответ

0

Создайте массив, который является «tmpArray» в detailViewController, а затем вы можете скопировать массив _objects в tmpArray. как этот

MastrerViewController.m

DetailViewController *detail = [[DetailViewController alloc]init]; 
detail.tmpArray = [[NSMutableArray alloc] initWithArray:_objects]; 

DetailViewController.h

@property (nonatomic,retain) NSMutableArray *tmpArray; 
0

delegate Реализовать метод tableview, который находится в вашем masterviewcontroller, а затем в том, что нажать ваши данные, что вы хотите отобразить в masterviewcontroller например:

Предполагая, что внизу делегат находится в вас г masterViewController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     _yourController = [[yourController alloc] initWithNibName:@"yourController" bundle:[NSBundle mainBundle]]; 

     [self.navigationController pushViewController:_yourController animated:YES]; 

    } 

Теперь это будет alloc, initialize и load ваш nib в detailviewcontroller, и если вы хотите отправить сообщение от мастера к деталям затем объявить property метод в detailviewcontroller и просто передать его сверху, как, что ниже: -

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     _yourDetailController = [[yourDetailController alloc] initWithNibName:@"yourDetailController" bundle:[NSBundle mainBundle]]; 
      [_yourDetailController setTempString:@"test"]; //Assuming that tempString is declared in yourDetailController class 
     [self.navigationController pushViewController:_yourDetailController animated:YES]; 

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

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