我在UITableViewCell类中动态创建了几个按钮,如下所示:
for (clientObjectId, _) in connectedObjectIds {
self.clientNameButton = UIButton(type: UIButtonType.System) as UIButton
self.clientNameButton.titleLabel?.lineBreakMode = NSLineBreakMode.ByTruncatingTail
self.clientNameButton.frame = CGRectMake(self.leftSideSpaceForUsersAndUserLabel, clientNameButtonFrameHeight, self.nameButtonWidth, self.nameButtonHeight)
self.clientNameButton.setTitle(self.userObjectIdsAndNames[clientObjectId], forState: UIControlState.Normal)
self.clientNameButton.titleLabel!.font = UIFont(name: "Helvetica", size: 12.0)
self.clientNameButton.addTarget(self, action: "asdf:", forControlEvents: UIControlEvents.TouchUpInside)
self.nameButtons.append(self.clientNameButton)
self.addSubview(self.clientNameButton)
}
我想在我的UITableView类中调用以下函数:
func asdf(sender:UIButton) {
print("Button tapped")
}
我正在考虑使用protocal从我的UITableView类接收asdf()
函数调用。但是有更好的方法吗?
修改
可能的重复之间的区别在于addTarget
出现在UITableView委托函数的UITableView类中。但是,我在委托函数中没有addTarget
,而是在我的UITableViewCell中。我已经阅读了那篇帖子,它确实解决了我的问题。这就是我在这里用另一篇文章提出来的原因。
另外,其他可能的重复是我的问题。我在那篇文章中问过这个问题,但是在一篇文章中提出了两个问题,所以我决定发布这篇文章,这样我就不会在一篇文章中提出两个问题。
答案 0 :(得分:1)
试试这段代码,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell Identifier";
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellIdentifier];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
cell.playButton.tag = indexPath.row
cell.playButton.addTarget(self, action: Selector("buttonPressed:"), forControlEvents: .TouchUpInside)
return cell;
}
动作:
func buttonPressed(sender:UIButton!) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewControllerWithIdentifier("ViewController") as! PlayViewController
self.navigationController?.pushViewController(controller, animated: true)
}
希望它有用