gpt4 book ai didi

ios - 目标为 :self not being sent to self? 的 UIButton

转载 作者:行者123 更新时间:2023-11-29 10:30:36 25 4
gpt4 key购买 nike

我正在创建一个新的 UIViewController(将其称为 MyViewController),并将 View (MyView) 添加为 TableViewCell 的 subview 。在 MyView 中,有一个按钮。该按钮是在 MyViewController 的初始化期间以编程方式创建的,如下所示:

-(id)initWithFrame:(CGRect)frame {
self = [super init];
if(self) {
[self.view setFrame:frame];

_yesButton = [[UIButton alloc] initWithFrame:CGRectMake(frame.size.width-150, 40, 140, 30)];
[_yesButton setTitle:@"Yeah!" forState:UIControlStateNormal];
[_yesButton addTarget:self action:@selector(didClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_yesButton];
}
return self;
}

现在,看起来很简单。它显示正确,模拟器中的一切看起来都很棒。

但是,当我在 MyView 中单击“_yesButton”时,出现崩溃并出现以下错误:

-[_UITableViewCellSeparatorView didClick]: unrecognized selector sent to instance 0x7b7f7ec0

什么? “_UITableViewCellSeparatorView”是什么时候出现的?我特意告诉 _yesButton 将 Target 设置为“self”,所以应该将选择器发送到 MyViewController,对吗?我什至可以想象它会被绊倒并将其发送到 UITableViewCell,因为 MyView 嵌入在 TableViewCell 中,但为什么是 SeperatorView?

谁能告诉我如何让我的 _yesButton 将调用发送回在其中创建它的 MyViewController?至于加分项,您能否解释一下“_UITableViewCellSeparatorView”是如何成为这次对话中的一件事的?

编辑:以下是我在 TableView 中构建单元格并将 MyView 添加到其中的方式。请注意,我故意不对此行使用出列,但如果它是问题的根源,这可能会改变。

UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyViewCell"];

MyViewController *myViewController = [[MyViewController alloc] initWithFrame:cell.contentView.frame];
[cell.contentView addSubview:myViewController.view];

return cell;

didClick 方法目前是空的(它甚至从未到达那里,所以我还没有写那么远),但它目前在 MyViewController 中简单地定义为:

-(void)didClick {

}

最佳答案

解决方案 #1

实际上这是因为你的 MyViewController 没有被 ARC 保留。正在调用的 dealloc 方法 ID。在您的 UITableViewController 中添加您的 Controller 的实例将解决该问题并使 ARC 保留您的 Controller 。

解决方案 #2

尝试这样的事情。

创建自定义 UITableViewCell :

MyCustomCell.h :

#import <UIKit/UIKit.h>

@interface MyCustomCell : UITableViewCell

@property (strong, nonatomic) UIButton *yesButton;

-(id)initWithFrame:(CGRect)frame;

@end

MyCustomCell.m :

#import "MyCustomCell.h"

@implementation MyCustomCell

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];

// Configure the view for the selected state
}

-(id)initWithFrame:(CGRect)frame {
self = [super init];
if(self) {
[self.view setFrame:frame];

_yesButton = [[UIButton alloc] initWithFrame:CGRectMake(frame)];
[_yesButton setTitle:@"Yeah!" forState:UIControlStateNormal];
[self.contentView addSubview:_yesButton];
}
return self;
}
@end

UITableViewControllerviewDidLoad 函数中:

[self.tableView registerClass:[MyCustomCell class] forCellReuseIdentifier:CellIdentifier];

然后在你的 tableView:cellForRowAtIndexPath:

MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifierr forIndexPath:indexPath];
if (cell == nil) {
cell = [[MyCustomCell alloc] initWithFrame:frame];
[cell.yesButton addTarget:self action:@selector(didClick) forControlEvents:UIControlEventTouchUpInside];
}

现在在您的 UITableViewController 中实现以下内容:

-(void)didClick {
// The following identify the in which cell the action has been triggered
NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];
if (indexPath != nil)
{
// Do whatever you want for the given cell
}
}

关于ios - 目标为 :self not being sent to self? 的 UIButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29870181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com