我处于需要从另一个调用中调用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像facebook那样的splitview,这是他们如何推viewcontroller的方法,如果我转到leftcontroller并单击自己的按钮,它会很好,但是当我以编程方式执行此整个过程时,则无法正常工作

if (indexPath.row ==0)
{
    NSLog(@"%@",tableView);
    self.sidePanelController.centerPanel = [[UINavigationController alloc] initWithRootViewController:[[NewViewController alloc] init]];
}


请任何人可以告诉我我该如何实现
我检查了这个答案calling didSelectRowAtIndexPath from other ViewController not responding iPad

但我不明白如何在我的代码中实现

最佳答案

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方法中设置它的委托。

希望有道理,让我知道!

关于iphone - 如何从另一个类调用didSelectRowAtIndexPath,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18396146/

10-13 04:41