From 651a8e30d489910b9d0b6294465c037e7028e684 Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Fri, 11 Sep 2020 23:39:50 -0700 Subject: [PATCH] Makes the library view display a list of monsters. Makes the library view ad search view share a view controller for their destination. --- MonsterCards.xcodeproj/project.pbxproj | 12 +-- MonsterCards/Base.lproj/Main.storyboard | 99 ++++++++++++++++++---- MonsterCards/Views/LibraryViewController.h | 4 +- MonsterCards/Views/LibraryViewController.m | 52 ++++++++++-- MonsterCards/Views/MonsterViewController.m | 25 +++++- MonsterCards/Views/SearchViewController.m | 9 +- 6 files changed, 165 insertions(+), 36 deletions(-) diff --git a/MonsterCards.xcodeproj/project.pbxproj b/MonsterCards.xcodeproj/project.pbxproj index b0a24ef..49c46b7 100644 --- a/MonsterCards.xcodeproj/project.pbxproj +++ b/MonsterCards.xcodeproj/project.pbxproj @@ -174,16 +174,16 @@ E20D032525031BA700FB6E43 /* Views */ = { isa = PBXGroup; children = ( - E20D032225031B9D00FB6E43 /* SearchViewController.h */, - E20D032325031B9D00FB6E43 /* SearchViewController.m */, - E20D032625031BDA00FB6E43 /* MonsterViewController.h */, - E20D032725031BDA00FB6E43 /* MonsterViewController.m */, - E20D032925031BE500FB6E43 /* LibraryViewController.h */, - E20D032A25031BE500FB6E43 /* LibraryViewController.m */, E20D032C25031BEF00FB6E43 /* CollectionsViewController.h */, E20D032D25031BEF00FB6E43 /* CollectionsViewController.m */, E20D032F25031BFD00FB6E43 /* DashboardViewController.h */, E20D033025031BFD00FB6E43 /* DashboardViewController.m */, + E20D032925031BE500FB6E43 /* LibraryViewController.h */, + E20D032A25031BE500FB6E43 /* LibraryViewController.m */, + E20D032625031BDA00FB6E43 /* MonsterViewController.h */, + E20D032725031BDA00FB6E43 /* MonsterViewController.m */, + E20D032225031B9D00FB6E43 /* SearchViewController.h */, + E20D032325031B9D00FB6E43 /* SearchViewController.m */, ); path = Views; sourceTree = ""; diff --git a/MonsterCards/Base.lproj/Main.storyboard b/MonsterCards/Base.lproj/Main.storyboard index b5e01e2..5deec64 100644 --- a/MonsterCards/Base.lproj/Main.storyboard +++ b/MonsterCards/Base.lproj/Main.storyboard @@ -20,7 +20,7 @@ - + @@ -59,26 +59,9 @@ - - - - - - - - - - - - - - - - - @@ -88,6 +71,7 @@ + @@ -155,10 +139,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MonsterCards/Views/LibraryViewController.h b/MonsterCards/Views/LibraryViewController.h index aa2ac87..db4c945 100644 --- a/MonsterCards/Views/LibraryViewController.h +++ b/MonsterCards/Views/LibraryViewController.h @@ -10,7 +10,9 @@ NS_ASSUME_NONNULL_BEGIN -@interface LibraryViewController : UIViewController +@interface LibraryViewController : UITableViewController + +@property (strong, nonatomic) IBOutlet UITableView *monstersTable; @end diff --git a/MonsterCards/Views/LibraryViewController.m b/MonsterCards/Views/LibraryViewController.m index eac9069..c937145 100644 --- a/MonsterCards/Views/LibraryViewController.m +++ b/MonsterCards/Views/LibraryViewController.m @@ -7,26 +7,68 @@ // #import "LibraryViewController.h" +#import "Monster.h" +#import "MonsterViewController.h" @interface LibraryViewController () +@property NSArray* allMonsters; + @end @implementation LibraryViewController - (void)viewDidLoad { [super viewDidLoad]; - // Do any additional setup after loading the view. + // Temporary setup of allMonsters until we bind to CoreData. + Monster *pixie = [[Monster alloc] initWithJSONString:@"{\"name\":\"Pixie\"}"]; + Monster *acolyte = [[Monster alloc] initWithJSONString:@"{\"name\":\"Acolyte\"}"]; + self.allMonsters = [NSArray arrayWithObjects:acolyte, pixie, nil]; +} + +- (void)viewWillAppear:(BOOL)animated { + // TODO: fetch monsters from CoreData + [self.monstersTable reloadData]; +} + +- (IBAction)addNewMonster:(id)sender { + Monster *monster = [[Monster alloc] init]; + monster.name = @"Unnamed Monster"; + self.allMonsters = [self.allMonsters arrayByAddingObject:monster]; + [self.monstersTable reloadData]; } -/* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. + if ([@"ShowMonsterDetail" isEqualToString:segue.identifier]) { + NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; + MonsterViewController *vc = (MonsterViewController*)segue.destinationViewController; + vc.monster = [self.allMonsters objectAtIndex:indexPath.row]; + } +} + +#pragma mark - UITableViewDataSource + +- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section { + return [self.allMonsters count]; +} + +- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath { + static NSString *simpleTableIdentifier = @"MonsterCell"; + + UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; + + if (cell == nil) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; + } + + Monster *monster = (Monster*)[self.allMonsters objectAtIndex:indexPath.row]; + + cell.textLabel.text = monster.name; + + return cell; } -*/ @end diff --git a/MonsterCards/Views/MonsterViewController.m b/MonsterCards/Views/MonsterViewController.m index 55f341b..9344e92 100644 --- a/MonsterCards/Views/MonsterViewController.m +++ b/MonsterCards/Views/MonsterViewController.m @@ -18,9 +18,32 @@ [super viewDidLoad]; if (self.monsterName != nil) { self.monsterName.text = self.monster.name; - } else if (self.navigationItem != nil && self.navigationItem.title != nil) { + } else if (self.navigationItem != nil) { self.navigationItem.title = self.monster.name; } } +- (void)viewWillAppear:(BOOL)animated { + // TODO: get the latest version of this monster from CoreData + if (self.monsterName != nil) { + self.monsterName.text = self.monster.name; + } else if (self.navigationItem != nil) { + if (self.monster.name == nil) { + self.navigationItem.title = @"Unnamed Monster"; + } else { + self.navigationItem.title = self.monster.name; + } + } +} + +- (IBAction)unwindWithSegue:(UIStoryboardSegue *)unwindSegue { +// UIViewController *sourceViewController = unwindSegue.sourceViewController; + // Use data from the view controller which initiated the unwind segue +} + +#pragma mark - Navigation + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { +} + @end diff --git a/MonsterCards/Views/SearchViewController.m b/MonsterCards/Views/SearchViewController.m index f434423..5bcf8eb 100644 --- a/MonsterCards/Views/SearchViewController.m +++ b/MonsterCards/Views/SearchViewController.m @@ -29,14 +29,13 @@ #pragma mark - Navigation -// In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. if ([@"ShowMonsterDetail" isEqualToString:segue.identifier]) { NSIndexPath *indexPath = [self.searchResults indexPathForSelectedRow]; - MonsterViewController *vc = (MonsterViewController*)segue.destinationViewController; - vc.monster = [self.foundMonsters objectAtIndex:indexPath.row]; + if ([segue.destinationViewController isKindOfClass:[MonsterViewController class]]) { + MonsterViewController *vc = (MonsterViewController*)segue.destinationViewController; + vc.monster = [self.foundMonsters objectAtIndex:indexPath.row]; + } } }