我有一个视图控制器,它有两个表视图控制器作为子视图。
当我单击表视图控制器中的一个单元格时,我希望它可以推送到新的视图控制器。但是,它说self.navigationController
和self.parentViewController.navigationController
是(null)
。
有谁知道如何从子视图中推送新视图?谢谢!
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
ProductClass *productClass = [arrProducts objectAtIndex:indexPath.row];
ProductSingleViewController *productSingleViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ProductSingleViewController"];
productSingleViewController.prod_title = productClass.title;
NSLog(@"VC1: %@, VC2: %@", self.navigationController, self.parentViewController.navigationController);
[self.parentViewController.navigationController pushViewController:productSingleViewController animated:YES];
}
答案 0 :(得分:0)
处理此问题的一种方法是在UITableViewControllers中设置委托方法。将委托方法添加到父视图控制器。只要有人点击表格内的单元格,它就会被触发。通过这种委托方法,您可以将新的视图控制器推送到堆栈中。
在MyTableViewController.h中:
@protocol MyTableDelegate <NSObject>
@required
- (void)selectedCellWithInfo:(NSDictionary *)info
@end
@interface MyTableViewController : UITableViewController {
id <MyTableDelegate> delegate;
}
@property (strong) id delegate;
在MyTableViewController.m中:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[delegate selectedCellWithInfo:[myTableDataSource[indexPath.row]];
}
在MyMainViewController.h中:
#import "MyTableViewController.h"
@interface MyMainViewController : UIViewController <MyTableDelegate>
在MyMainViewController.m中:
- (void)viewDidLoad {
[super viewDidLoad];
myTableViewController.delegate = self;
}
- (void)selectedCellWithInfo:(NSDictionary *)info {
// Do something
}
答案 1 :(得分:0)
仅当视图控制器位于导航控制器的导航堆栈中时,视图控制器的navigationController属性才会返回有效的导航控制器对象。
如果PRoductSingleViewController是你的rootviewcontroller 1.拖放导航控制器 2.将导航控制器设置为rootviewcontroller。 3.将导航子Viewcontroller替换为PRoductSingleViewController
或者你可以在app delegate.m class
中管理它- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
_productSingleViewController = [[PRoductSingleViewController alloc]initWithNibName:@"PRoductSingleViewController" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: _productSingleViewController];
[self.window addSubview:navController.view];
[navController release];
[self.window makeKeyAndVisible];
return YES;
}