2012-03-29 19 views
0

我想移動到名爲DetailView的nib文件而不是警報。我無法弄清楚如何讓這個工作。我想把數據從我這裏帶到新的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

您是否爲DetailView的NIB創建了UIViewController?如果是這樣,那麼在UIViewController中創建一些屬性,以保存你用來推入新視圖的數據。確保您分配新的視圖控制器並在IB的筆尖視圖控制器中設置所有必要的連接和委託。

然後在您要調用UIAlertView的位置實例化新的UIViewController。

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 2012-03-30 07:13:12

+0

查看UIViewController和UINavigationController的文檔以獲取更多信息。導航控制器是UIViewController的一個屬性,應該在大多數情況下已經存在。你只需要調用它。 – Rob 2012-03-30 10:50:48

+0

再次感謝。我越來越接近:)我有一個NSLog的詳細信息頁面設置。當我運行時,我可以看到數據到達控制檯中的詳細視圖,但視圖不會更改。我在IB中遺漏了什麼? – user1301000 2012-03-30 13:37:20