如何在表视图中获取详细信息视图而不是警报

时间:2012-03-29 14:32:27

标签: ios5

我想转移到名为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

1 个答案:

答案 0 :(得分: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];

希望这有帮助。