在 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 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
打印可变展开 Segue - Xcode 8.0 Swift 3.0