我处于需要从另一个调用中调用didSelectRowAtIndexPath的情况,我喜欢这个 我创建该类的对象并调用viewdidload,以便我的表视图初始化
- (void)_hideTapped:(id)sender
{
LeftController *left = [[LeftController alloc]init];
[left viewDidLoad ];
}
在LeftController中
- (void)viewDidLoad {
[super viewDidLoad];
mainArray = [[NSMutableArray alloc]initWithObjects:@"Go To Camera",@"Big Contacts List",@"Where Am I? On map",@"Watch And Alarm",@"Calculator With Big Letters",@"Big KeyBoard For Email",@"Calendar With Events",@"Settings", nil ];
// NSLog(@"mainArray%@",mainArray);
if (!_tableView) {
UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
tableView.delegate = (id<UITableViewDelegate>)self;
tableView.dataSource = (id<UITableViewDataSource>)self;
[self.view addSubview:tableView];
self.tableView = tableView;
[self iDecideWhichCell];
}
}
-(void)iDecideWhichCell
{
NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:0];
[self tableView:self.tableView didSelectRowAtIndexPath:path];
}
这是我的didSelectRowAtIndexPath的一部分 我正在使用JASidePanels进行splitview,如facebook,这就是他们如何推动viewcontroller它如果我去左控制器并点击我的自我,但当我以编程方式完成整个过程然后它无法正常工作
if (indexPath.row ==0)
{
NSLog(@"%@",tableView);
self.sidePanelController.centerPanel = [[UINavigationController alloc] initWithRootViewController:[[NewViewController alloc] init]];
}
请任何人都能告诉我如何实现这一目标 我检查了这个答案 calling didSelectRowAtIndexPath from other ViewController not responding iPad
但我不明白如何在我的代码中实现这个
答案 0 :(得分:3)
tableView:didSelectRowAtIndexPath:是一个委托方法。你不应该直接打电话。选择表视图行时会调用它。
您应该为LeftController创建一个委托,因此LeftController可以保留为其自己的tableView的委托。
在 LeftController.h 中实施:
@class LeftController;
@protocol LeftControllerDelegate
-(void)leftController:(LeftController *)leftController didSelectTableView:(UITableView *)tableView rowAtIndexPath:(NSIndexPath *)indexPath;
@end
@interface LeftController : UIViewController
@property(nonatomic, weak) id<LeftControllerDelegate> delegate;
// ... other public properties
-(id)initWithDelegate:(id<LeftControllerDelegate>)delegate;
// ... other public methods
@end
在 LeftController.m 中实施:
-(id)initWithDelegate:(id<LeftControllerDelegate>)delegate
{
self = [super init];
if (self) {
self.delegate = delegate;
}
return self;
}
-(void)viewDidLoad
{
[super viewDidLoad];
//create the tableView...
//set the tableView delegate
tableView.delegate = self;
//do other view setup...
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.delegate leftController:self didSelectTableView:tableView rowAtIndexPath:indexPath];
}
在您的其他视图控制器实现中,例如的 MyOtherController.m 强>:
//create instance of LeftController that has self as delegate
LeftController *left = [[LeftController alloc] initWithDelegate:self];
并实现委托方法:
-(void)leftController:(LeftController *)leftController didSelectTableView:(UITableView *)tableView rowAtIndexPath:(NSIndexPath *)indexPath
{
//Yay! This instance of MyOtherController has received the delegate message from LeftController, including details of table view and row selected.
}
在这里,您可以将tableView消息委托给LeftController,然后将LeftController功能委托给其委托。在创建和初始化它时,可以在init方法中设置其委托。
希望它有意义,让我知道!
答案 1 :(得分:0)
您可以在要处理的类didSelectRowAtIndexPath
中创建自己的方法,并从同一类的didSelectRowAtIndexPath调用该方法。还设置委托来处理事件。