2012-03-29 3 views
0

Я хочу перейти к файлу nib с именем DetailView вместо предупреждения. Я не могу понять, как это сделать. Я хочу, чтобы данные помещали строку со мной в новый Wiew. Я действительно пытался заставить это работать, но я не могу понять это.Как добраться до подробного подробного представления вместо предупреждения в виде таблицы

#import "TabBarSecondViewController.h" 
#import "NSDictionary+MutableDeepCopy.h" 
@implementation TabBarSecondViewController 

@synthesize names; 
@synthesize keys; 
@synthesize table; 
@synthesize search; 
@synthesize allNames; 
@synthesize isSearching; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
if (self) { 
    self.title = NSLocalizedString(@"Sök Mat", @"Sök Mat"); 
    //self.tabBarItem.image = [UIImage imageNamed:@"second"]; 
} 
return self; 
} 


#pragma mark - 
#pragma mark Custom Methods 
- (void)resetSearch { 
self.names = [self.allNames mutableDeepCopy]; 
NSMutableArray *keyArray = [[NSMutableArray alloc] init]; 
[keyArray addObject:UITableViewIndexSearch]; 
[keyArray addObjectsFromArray:[[self.allNames allKeys] 
           sortedArrayUsingSelector:@selector(compare:)]]; 
self.keys = keyArray; 
} 

- (void)handleSearchForTerm:(NSString *)searchTerm { 
NSMutableArray *sectionsToRemove = [[NSMutableArray alloc] init]; 
[self resetSearch]; 

for (NSString *key in self.keys) { 
    NSMutableArray *array = [names valueForKey:key]; 
    NSMutableArray *toRemove = [[NSMutableArray alloc] init]; 
    for (NSString *name in array) { 
     if ([name rangeOfString:searchTerm 
         options:NSCaseInsensitiveSearch].location == NSNotFound) 
      [toRemove addObject:name]; 
    } 
    if ([array count] == [toRemove count]) 
     [sectionsToRemove addObject:key]; 

    [array removeObjectsInArray:toRemove]; 
} 
[self.keys removeObjectsInArray:sectionsToRemove]; 
[table reloadData]; 
} 

- (void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 
// Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
NSString *path = [[NSBundle mainBundle] pathForResource:@"sortednames" 
               ofType:@"plist"]; 
NSDictionary *dict = [[NSDictionary alloc] 
         initWithContentsOfFile:path]; 
self.allNames = dict; 

[self resetSearch]; 
[table reloadData]; 
[table setContentOffset:CGPointMake(0.0, 44.0) animated:NO];  

} 

- (void)viewDidUnload 
    { 
[super viewDidUnload]; 
// Release any retained subviews of the main view. 
// e.g. self.myOutlet = nil; 
self.table = nil; 
self.search = nil; 
self.allNames = nil; 
self.names = nil; 
self.keys = nil;} 

- (void)viewWillAppear:(BOOL)animated 
{ 
[super viewWillAppear:animated]; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
[super viewDidAppear:animated]; 
} 

- (void)viewWillDisappear:(BOOL)animated 
{ 
[super viewWillDisappear:animated]; 
} 

- (void)viewDidDisappear:(BOOL)animated 
{ 
[super viewDidDisappear:animated]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
// Return YES for supported orientations 
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

#pragma mark - 
#pragma mark Table View Data Source Methods 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
return ([keys count] > 0) ? [keys count] : 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView 
numberOfRowsInSection:(NSInteger)section { 
if ([keys count] == 0) 
    return 0; 
NSString *key = [keys objectAtIndex:section]; 
NSArray *nameSection = [names objectForKey:key]; 
return [nameSection count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView 
    cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
NSUInteger section = [indexPath section]; 
NSUInteger row = [indexPath row]; 

NSString *key = [keys objectAtIndex:section]; 
NSArray *nameSection = [names objectForKey:key]; 

static NSString *SectionsTableIdentifier = @"SectionsTableIdentifier"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: 
         SectionsTableIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] 
      initWithStyle:UITableViewCellStyleDefault 
      reuseIdentifier:SectionsTableIdentifier]; 
} 

cell.textLabel.text = [nameSection objectAtIndex:row]; 
return cell; 
} 

- (NSString *)tableView:(UITableView *)tableView 
titleForHeaderInSection:(NSInteger)section { 
if ([keys count] == 0) 
return nil; 

NSString *key = [keys objectAtIndex:section]; 
if (key == UITableViewIndexSearch) 
return nil; 
return key; 
} 
/* 
    - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 
if (isSearching) 
return nil; 
return keys; 
} 
*/ 
#pragma mark - 
#pragma mark Table View Delegate Methods 
- (NSIndexPath *)tableView:(UITableView *)tableView 
willSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
[search resignFirstResponder]; 
isSearching = NO; 
search.text = @""; 
[tableView reloadData]; 
return indexPath; 
} 

#pragma mark - 
#pragma mark Search Bar Delegate Methods 
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
NSString *searchTerm = [searchBar text]; 
[self handleSearchForTerm:searchTerm]; 
} 

- (void)searchBar:(UISearchBar *)searchBar 
textDidChange:(NSString *)searchTerm { 
if ([searchTerm length] == 0) { 
    [self resetSearch]; 
    [table reloadData]; 
    return; 
} 
[self handleSearchForTerm:searchTerm]; 
} 

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { 
isSearching = NO; 
search.text = @""; 
[self resetSearch]; 
[table reloadData]; 
[searchBar resignFirstResponder]; 
} 

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { 
isSearching = YES; 
[table reloadData]; 
} 

- (NSInteger)tableView:(UITableView *)tableView 
sectionForSectionIndexTitle:(NSString *)title 
      atIndex:(NSInteger)index { 
NSString *key = [keys objectAtIndex:index]; 
if (key == UITableViewIndexSearch) { 
    [tableView setContentOffset:CGPointZero animated:NO]; 
    return NSNotFound; 
} else return index; 
} 

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

NSUInteger section = [indexPath section]; 
NSUInteger row = [indexPath row]; 

NSString *key = [keys objectAtIndex:section]; 
NSArray *nameSection = [names objectForKey:key]; 
NSString *selectedCell = [nameSection objectAtIndex:row]; 
NSLog(@"Log selectedCell: %@", selectedCell); 

NSString *msg = [[NSString alloc] initWithFormat: 
       @"You have selected %@", selectedCell]; 
UIAlertView *alert = 
[[UIAlertView alloc] initWithTitle:@"State selected" 
          message:msg 
          delegate:self 
       cancelButtonTitle:@"OK" 
       otherButtonTitles:nil]; 

[alert show];   

} 


@end 

ответ

0

Вы создали UIViewController для NIB DetailView? Если это так, то создайте пару свойств в UIViewController, чтобы удерживать данные, которые вы вставляете в новое представление. Убедитесь, что вы назначили новый контроллер представления и установите все необходимые соединения и делегаты в контроллере просмотра nib в IB.

Затем создайте экземпляр нового UIViewController, где вы вызываете UIAlertView.

UIViewController *myVC = [[UIViewController alloc] init]; 
id myValueOne = [myDataOne objectAtIndex:indexPath.row]; 
id myValueTwo = [myDataTwo objectAtIndex:indexPath.row]; 
myVC.propertyOne = myValueOne; 
myVC.propertyTwo = myValueTwo; 
[self.navigationController pushViewController:myVC animated:YES]; 

Надеюсь, это поможет.

+0

Благодарим за помощь. Я до сих пор не работаю. Я немного не уверен, как и где я объявляю navigationController, чтобы заставить это работать. – user1301000

+0

Посмотрите документацию для UIViewController и UINavigationController, чтобы получить дополнительную информацию. Контроллер навигации является свойством UIViewController и должен в большинстве случаев уже присутствовать. Вам просто нужно позвонить. – Rob

+0

Еще раз спасибо. Я приближаюсь :) У меня есть подробная страница просмотра, настроенная с помощью NSLog. Когда я запускаю, я вижу, что данные попадают в подробный вид в консоли, но представление не меняется. Я что-то пропустил в IB? – user1301000