我正试图解决这个问题一段时间了。我在tableview单元格中以编程方式创建UIButton。单击按钮后我想要切换或推送到另一个视图控制器。如果我使用StoryBoard,在那里创建按钮,然后控制 - 拖动segue到目标VC,这是一块蛋糕。但是我不想出于各种原因这样做。以下是我的代码。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
// <<<< bunch of code snipped out here to keep this example short >>>
for(UIButton *button in cell.subviews)
{
[button removeFromSuperview];
}
UIImage *image = [UIImage imageNamed:[contentArray_ objectAtIndex:indexPath.row]];
UIButton *imageButton = [[UIButton alloc] initWithFrame:CGRectMake(5, 5, 240, 240)];
[imageButton setImage:image forState:UIControlStateNormal];
imageButton.layer.masksToBounds = YES;
imageButton.layer.cornerRadius = 5.0;
imageButton.layer.borderWidth = 1.0;
imageButton.layer.borderColor = [[UIColor grayColor] CGColor];
CGAffineTransform rotateButton = CGAffineTransformMakeRotation(M_PI_2);
imageButton.transform = rotateButton;
cell.backgroundColor = [UIColor clearColor];
[cell addSubview:imageButton];
return cell;
现在,对于此表中的每一行,将以编程方式创建带有图像的按钮。我也旋转了按钮 - 是的,这是一个水平的桌面视图。
那么如何对按钮点击采取行动呢?所有按钮都将转到相同的目标视图控制器...
PS - 我正在使用带有ARC的Xcode 4.2(不确定这真的很重要)。
我已经实现了代码建议(感谢jrturton)但是我相信因为我在UITableView单元格中我无法呈现模态视图控制器。我现在有以下代码......
.h文件:
@interface DetailsHorizontalPhotoCell : UITableViewCell <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, strong) IBOutlet UITableView *horizontalTableView;
@property (nonatomic, strong) NSArray *contentArray;
- (IBAction)photoButton:(id)sender;
@end
.m文件:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
/// ----- code here to setup the cell, button, image, etc...
// do something when the buttong is pressed
[imageButton addTarget:self action:@selector(photoButton:) forControlEvents:UIControlEventTouchUpInside];
return cell;
}
- (IBAction)photoButton:(id)sender
{
CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.horizontalTableView];
NSIndexPath *hitIndex = [self.horizontalTableView indexPathForRowAtPoint:hitPoint];
// do some stuff here to pull object data out of the contentArray
NSLog(@"Image clicked, index: %d", hitIndex.row);
// other non-relevant code snipped to keep this example short
// next I want to present a modal view controller (lets call it PhotoAlbum) which is a TableViewController
PhotoAlbum *photoAlbum = [[PhotoAlbum alloc] init];
// below does not work, does not even autocomplete in Xcode. I believe its because I'm in a UITableViewCell and not a VC... Any suggestions here?
[photoAlbum setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self presentModalViewController:photoAlbum animated:YES];
}
答案 0 :(得分:2)
我不确定为什么每次在单元格中重新创建按钮而不是更改图像,但是现在让我们忽略它。
您可以将所有按钮连接到表视图控制器中的相同操作,此操作可以照常使用sender
参数。
您可以添加如下操作:
[imageButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
这将使用签名调用视图控制器中的方法:
-(void)buttonPressed:(UIButton * sender)
在此方法中,您可以按如下方式检测单击的行:
CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *hitIndex = [self.tableView indexPathForRowAtPoint:hitPoint];
然后执行您喜欢的任何其他操作。