I created a view "CategoryTableView
" that subclass from UIView
. And CategoryTableView
contains a UITableView
. I added CategoryTableView
as a subview to HomeViewController
that subclass from UIViewController
. Right now, I want to push a new view controller when didSelectRowAtIndexPath
executes. But, in CategoryTableView
, how do I push or present another view controller. I can't get to the navigation controller in CategoryTableView
.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
CategoryTableView.h
@property (retain, nonatomic) parentViewController *parent; //create one property for parent view like this
CategoryTableView.m
@sythesize parent;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[parent.navigationController . . .]; // preform action
//OR..
[parent presentModalViewController: . . .]; // present modal view
}
parent.m
//while calling your CategoryTableView assign self to your parent object
CategoryTableView *tblView = [CategoryTableView alloc] init];
tblView.parent = self;
回答2:
You need to use custom delegates to achieve this...
in CategoryTableView.h
@protocol CategoryTableViewDelegate <NSObject>
-(void)pushViewControllerUsinDelegate:(UIViewController *)viewController;
@end
@interface CategoryTableView : UIView
@property (nonatomic, retain) id<CategoryTableViewDelegate> delegate;
@end
in CategoryTableView.m
@implementation CategoryTableView
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//Create the required UIViewControllers instance and call the delegate method.
UIViewController *viewController = [[UIViewController alloc] init];
[self.delegate pushViewControllerUsinDelegate:viewController];
}
@end
in HomeViewController.h
@interface HomeViewController : UIViewController <CategoryTableViewDelegate>
@end
in HomeViewController.m
@implementation HomeViewController
-(void)viewDidLoad
{
[super viewDidLoad];
//initialization of CategoryTableView like this...
CategoryTableView *categoryTableViewInstance = [[CategoryTableView alloc] init];
[categoryTableViewInstance setDelegate:self];
}
-(void)pushViewControllerUsinDelegate:(UIViewController *)viewController
{
[self.navigationController pushViewController:viewController animated:YES];
}