jeudi 29 janvier 2015

UISplitView master view button through storyboard

Evening,


Firstly, I apologise for my code - I am too aware of its bugs; once I have all running as I want I shall be going back and addressing it.


I have a split view ipad storyboard (table and detail) which shares its code with the iphone storyboard. It works fine. However, I want the master view for the ipad to remain in view all times. Otherwise, to have a button to bring it into view. I have looked a tutorials and added the methods I’ve found online into various parts of my code trying to get it to work to no avail. My code is below - one VC supplies the table data and the other the detail view. I have tried dragging the toolbar and toolbar item onto the storyboard and linking that via segue to the table view - but it crashes the second time I click the button.


Summary: How do I 1) add a button to the storyboard to bring the master to view whilst sharing the view controllers. 2) how do I permanently have the master in view sharing view controllers.


The RCVC is master, detailVC detail view


Thank you


The iPad storyboard takes this format - the SplitViewController, leading to a nav controller and table view (master) and the detail view being a view with a number of labels and adbanner. I've used a replace segue between the detail view and master view which works - I'm not sure if this is the wrong thing to do.



@implementation RCViewController

static NSString *CellIdentifier = @"Cell Identifier";

@synthesize words;
@synthesize alphabetizedWords;
@synthesize wordDictionary;



-(NSDictionary *)alphabetizedWords:(NSArray *)wordsArray {
NSMutableDictionary *buffer = [[NSMutableDictionary alloc]init];

for (int i=0; i <wordsArray.count; i++) {

NSDictionary *keyValue = [wordsArray objectAtIndex:i];
NSString *word = [[wordsArray objectAtIndex:i]objectForKey:@"Word"];
NSString *firstLetter = [[word substringToIndex:1]uppercaseString];

if ([buffer objectForKey:firstLetter]) {
[(NSMutableArray *)[buffer objectForKey:firstLetter]addObject:keyValue];
}
else {
NSMutableArray *mutableArray = [[NSMutableArray alloc]initWithObjects:keyValue, nil];
[buffer setObject:mutableArray forKey:firstLetter];
}
}
NSArray *keys = [buffer allKeys];
for (int j; j<keys.count; j++) {
NSString *key = [keys objectAtIndex:j];
[(NSMutableArray *)[buffer objectForKey:key]sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
}
NSDictionary *result = [NSDictionary dictionaryWithDictionary:buffer];
return result;
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
NSArray *keys = [self.alphabetizedWords allKeys];
return [keys count];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSArray *unsortedKeys = [self.alphabetizedWords allKeys];
NSArray *sortedKeys = [unsortedKeys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSString *key = [sortedKeys objectAtIndex:section];
NSArray *wordsForSection = [self.alphabetizedWords objectForKey:key];
return [wordsForSection count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];


NSArray *unsortedKeys = [self.alphabetizedWords allKeys];
NSArray *sortedKeys = [unsortedKeys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSString *key = [sortedKeys objectAtIndex:[indexPath section]];
NSArray *wordsForSection = [self.alphabetizedWords objectForKey:key];
NSString *word = [[wordsForSection objectAtIndex:[indexPath row]]objectForKey:@"Word"];

[cell.textLabel setText:word];

return cell;
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSArray *keys = [[self.alphabetizedWords allKeys]sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSString *key = [keys objectAtIndex:section];
return key;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

// perform the segue by getting the cell selected and passing it to the prepareForSegue method
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[self performSegueWithIdentifier:@"showDetail" sender:cell];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"showDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
detailViewController *destViewController = segue.destinationViewController;

NSArray *unsortedKeys = [self.alphabetizedWords allKeys];
NSArray *sortedKeys = [unsortedKeys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSString *key = [sortedKeys objectAtIndex:[indexPath section]];
NSArray *wordsForSection = [self.alphabetizedWords objectForKey:key];
NSString *word = [[wordsForSection objectAtIndex:[indexPath row]]objectForKey:@"Word"];
destViewController.word = word;
destViewController.definition = [[wordsForSection objectAtIndex:[indexPath row] ]objectForKey:@"Definition"];

}
}




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


NSString *path = [[NSBundle mainBundle]pathForResource:@"words" ofType:@"plist"];

// NSSortDescriptor *descriptor = [[NSSortDescriptor alloc]initWithKey:@"Word" ascending:YES];

// NSArray *wordsDictionary = [[NSArray arrayWithContentsOfFile:path]sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor, nil]];
NSArray *wordsDictionary = [NSArray arrayWithContentsOfFile:path];
self.words = wordsDictionary;

self.alphabetizedWords = [self alphabetizedWords:self.words];

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellIdentifier];
}

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

@end

@implementation detailViewController

@synthesize word;
@synthesize wordLabel;
@synthesize definition;
@synthesize definitionLabel;
@synthesize adBanner;



- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}



-(void)bannerViewDidLoadAd:(ADBannerView *)banner {
[adBanner setAlpha:1];
}
-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
[adBanner setAlpha:0];
}


- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.adBanner.delegate= self;

self.navigationItem.title = word;
wordLabel.text = word;
definitionLabel.text = definition;

[self.splitViewController.view setNeedsLayout];

}



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

/*
#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.
}
*/


@end



Aucun commentaire:

Enregistrer un commentaire