在 onclick 条形图列之后,Segue 在 coreplot Graphview.m 中不起作用

Posted

技术标签:

【中文标题】在 onclick 条形图列之后,Segue 在 coreplot Graphview.m 中不起作用【英文标题】:Segue not working in coreplot Graphview.m after onclick barchart column 【发布时间】:2013-01-15 10:49:51 【问题描述】:

在 coreplot(Bartchart) 中使用下面的代码从 GraphView.m 类中执行 segue

但我收到一个错误:instance method '-performSegueWithIdentifier:sender:' not found (return type defaults to 'id')

我该如何解决?请帮忙。 提前致谢。

-(void)barPlot:(CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUInteger)index
    
        NSLog(@"barWasSelectedAtRecordIndex %d", index);

         [self performSegueWithIdentifier:@"list2" sender:self];
    

【问题讨论】:

【参考方案1】:

如果 GraphView.m 是一个 UIView 你不会走得太远,因为performSegueWithIdentifier:sender 是一个 UIViewController 方法。

假设 graphView 是从 viewController 创建的,您希望将其设置为 viewController。

在 GraphView.h 中

在 @interface 上方声明一个 graphView 协议:

@protocol GraphViewDelegate-(void)barPlot:(CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUInteger)index@end

声明一个属性:

@property (weak) id <GraphViewDelegate> delegate;

在 GraphView.m 中:

-(void)barPlot:(CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUInteger)index
    
        [[self delegate] barPlot:plot barWasSelectedAtRecordIndex:index];
     

在 ViewController.h 中修改@interface 行

@interface MyViewController: UIViewController <GraphViewDelegate>

在 ViewController.m 中

当你创建graphView时,将delegate设置为self(如果graphView是在Interface Builder中创建的,你可以CTRL-拖动一行到viewController来设置delegate):

GraphView* graphView = [GraphView alloc] init];[graphView setDelegate:self];

按照您在 GraphView 中的方式实现委托方法(您可能不需要 index 参数,但我还是把它继承了)..

-(void)barPlot:(CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUInteger)index
 
    [self performSegueWithIdentifier:@"list2" sender:self];
 

你可能想修改你的方法签名,类似于

            -(void)graphView:(GraphView*)graphView 
         didSelectBarAtIndex:(NSUInteger)index 
                     barPlot:(CPTBarPlot *)plot 

 (it's good practice to send a reference to the sender along with the message)

【讨论】:

Graphview 只是一个类。那么如何在上面显示的方法中 performSegueWithIdentifier:sender 呢? 您真的想将它发送到您的 viewController - 更好的是,使用代理向 viewController 发送消息 - 从 GraphView 的角度来看,这有意义吗? 怎么做?请帮忙。 是否有创建graphView的UIViewController? 谢谢先生。我试过 TargetViewController targetVC = (TargetViewController)segue.destinationViewController; targetVC.string1 = string1; 正如 Prajwal 先生所建议的,它仍然无法正常工作。【参考方案2】:

找不到该方法,如果您确定没有拼写错误,也可以尝试将该方法包含在 .h 文件中。

【讨论】:

我没有犯任何拼写错误。它是我试图在该类的方法中调用 performSegueWithIdentifier:sender 的类我该怎么做? 这可能会有所帮助link

以上是关于在 onclick 条形图列之后,Segue 在 coreplot Graphview.m 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

ggplot:条形图面板

打印可变展开 Segue - Xcode 8.0 Swift 3.0

在 unwind segue 之后执行 push segue

为啥 TabBar 在 segue 之后隐藏?

基于 Segue 源的单个按钮的多个操作

在 Segue 之后失去@IBOutlets