我在自定义表格视图单元格中有一些UIButtons,按下时我希望它们在视图控制器中调用segues,该视图控制器是单元格所在的表视图的主机。我现在正在做的是声明这样的动作: - (无效)行动;
在表视图所在的类中。然后我从单元格中调用该操作,如下所示:
ViewController *viewController = [[ViewController alloc] init];
[viewController action];
然而,当调用该动作时,它表示视图控制器没有这样的segue,我知道这是不正确的。从视图控制器本身调用“动作”可以完美地工作,而不是从单元格。
此外,这是执行segue的代码:
-(void)action {
[self performSegueWithIdentifier:@"action" sender:self];
}
我该如何做到这一点?
任何建议都表示赞赏。
更新:
我只是试图像这样在单元格上设置委托:
Cell的头文件: @class PostCellView;
@protocol PostCellViewDelegate
-(void)action;
@end
@interface PostCellView : UITableViewCell <UIAlertViewDelegate, UIGestureRecognizerDelegate>
@property (weak, nonatomic) id <PostCellViewDelegate> delegate;
在单元格的主文件中,我调用这样的动作: [self.delegate action];
并在托管表视图的视图的标题中导入单元格,如下所示: #import“PostCellView.h”
@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, PostCellViewDelegate>
然后在该视图的主文件中,我有单元格操作:
-(void)action {
[self performSegueWithIdentifier:@"action" sender:self];
}
但行动从未执行过,我查了一下。当我从单元格调用动作时我记录了,并且我在动作本身上放置了一个NSLog,并且从单元格调用它的日志工作但不是动作。
答案 0 :(得分:1)
我认为你的问题是ViewController *viewController = [[ViewController alloc] init];
[viewController action];
您正在启动一个新的ViewController,而不是获取该单元所在的当前控件。
也许您可以在单元格上设置委托,以便单元格具有对viewController的引用
答案 1 :(得分:0)
创建按钮并以编程方式调用其处理程序的简单方法是
UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(100, 100, 80, 40)];
[button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:button]; //self.view is the view on which you want to add button
及其处理程序应在您的实现文件中定义如下:
-(void)buttonClick:(id)sender{
NSLog(@"button clicked");
// your code on click of button
}
您可以查看iOS documentation。
希望这可以帮助您找出问题所在。 :)