从表视图(子视图)推送新的视图控制器
Posted
技术标签:
【中文标题】从表视图(子视图)推送新的视图控制器【英文标题】:Push new view controller from table view (subview) 【发布时间】:2016-02-25 02:27:45 【问题描述】:我有一个视图控制器,它有两个表视图控制器作为子视图。
当我单击表格视图控制器中的一个单元格时,我希望它推送到新的视图控制器。但是,它说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];
【问题讨论】:
你的 self.parentViewController 也是 null 吗? 【参考方案1】:处理这个问题的一种方法是在 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
【讨论】:
【参考方案2】:仅当视图控制器位于导航控制器的导航堆栈中时,视图控制器的 navigationController 属性才会返回有效的导航控制器对象。
如果 PRoductSingleViewController 是你的 rootviewcontroller 1.拖放导航控制器 2.设置导航控制器为rootviewcontroller。 3. 用你的 PRoductSingleViewController 替换导航子 Viewcontroller
或者你可以在 app delegate.m 类中管理它
- (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;
【讨论】:
以上是关于从表视图(子视图)推送新的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章