从tableview控制器推送视图控制器不起作用

时间:2011-07-14 21:04:23

标签: iphone objective-c xcode uiviewcontroller uinavigationcontroller

我已经设置了一个表视图控制器并连接了一个子视图,所以当我点击行时会出现新的子视图。我一步一步地遵循了一些教程,但是由于某些原因,当我点击行时(虽然正在选择行)没有任何内容。

这是我的主视图控制器:

@interface TableViewsViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {

IBOutlet UITableView *tblSimpleTable;
IBOutlet UINavigationBar *navBar;
NSArray *arryData;
NSMutableArray *listOfItems;
}

@property (nonatomic, retain) IBOutlet UITableView *tblSimpleTable;
@property (nonatomic, retain) IBOutlet UINavigationBar *navBar;
@property (nonatomic, retain) NSArray *arryData;
@property (nonatomic, retain) NSMutableArray *listOfItems;

.m(相关部分)

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
}

NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"Computers"];
NSString *cellValue = [array objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;

return cell;

}

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

NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"Computers"];
NSString *selectedCountry = [array objectAtIndex:indexPath.row];

//Initialize the detail view controller and display it.
DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]];
dvController.selectedComputer = selectedCountry;
[self.navigationController pushViewController:dvController animated:YES];
dvController = nil;

}

子视图控制器:

·H

@interface DetailViewController : UIViewController {

IBOutlet UILabel *lblText;
NSString *selectedComputer;


}

@property (nonatomic, retain) IBOutlet UILabel *lblText;
@property (nonatomic, retain) NSString *selectedComputer;

@end

的.m

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

//Display the selected country.
lblText.text = selectedComputer;

//Set the title of the navigation bar
self.navigationItem.title = @"Selected Computer";

}

我很确定IB中的一切都很好。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

是导航控制器内的表视图。你可以在

上放一个断点
[self.navigationController pushViewController:dvController animated:YES];

并在self.navigationController属性中获取战利品。如果它是零,你将无法向它推送任何东西,但它不会给你一个错误,因为在大多数情况下向nil发送消息只会返回nil。

答案 1 :(得分:1)

可能是一个小看。如果您从模板创建了DetailedViewController,并且检查了为它创建nib文件,那么nib文件应该与.h和.m文件具有相同的名称。因此,请检查您的nib类的名称。它应该是:

DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

P.S。在这里使用self.

self.dvController = nil;

否则你会泄漏。