我XIB
文件 TimerCell.xib 和UITableViewCell
。在 cellForRowAtIndexPath 中的其他类中,我初始化此UITableViewCell
:
static NSString *CellIdentifier = @"cellTimer";
TimerCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
//cell = [[TimerCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TimerCell"owner:self options:nil];
cell = [nib objectAtIndex:0];
在我的 TimerCell 中,我有两个UILabel
和一个UIButton
。对于此按钮,我想将操作设置为某个方法。
我该怎么做?以及如何在我的背景倒数计时器中实时显示第一个UILabel
数据?
答案 0 :(得分:26)
这段代码可以帮助你
static NSString *CellIdentifier = @"cellTimer";
TimerCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
//cell = [[TimerCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TimerCell"owner:self options:nil];
cell = [nib objectAtIndex:0];
UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
button.tag=indexPath.row;
[button addTarget:self
action:@selector(aMethod:) forControlEvents:UIControlEventTouchDown];
[button setTitle:@"cellButton" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 0.0, 160.0, 40.0);
[cell.contentView addSubview:button];
}
return cell;
}
-(void)aMethod:(UIButton*)sender
{
NSLog(@"I Clicked a button %d",sender.tag);
}
希望这有帮助!!!
答案 1 :(得分:16)
由于您的子类UITableViewCell
名为TimerCell
,因此您可以将插座属性添加到TimerCell
。例如:
@interface TimerCell : UITableViewCell
@property (nonatomic, strong) UIButton *button;
@property (nonatomic, strong) UILabel *label;
@end
在TimerCell.xib
中,将插座连接到按钮和标签。
然后,在tableView:cellForRowAtIndexPath:
中,您可以轻松访问该按钮以设置其目标和操作:
static NSString *CellIdentifier = @"cellTimer";
TimerCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TimerCell"owner:self options:nil];
cell = [nib objectAtIndex:0];
}
[cell.button addTarget:self action:@selector(cellButtonWasTapped:)
forControlEvents:UIControlEventTouchUpInside];;
您可以使用其label
属性访问单元格的标签,以便在计时器触发时更新它。
获取按钮和标签的另一种方法是使用视图标记,如我在this answer中所述。
在cellButtonWasTapped:
(或您从按钮发送的任何操作)中,您可能希望查找包含按钮的单元格的索引路径。我在this answer中解释了如何做到这一点。
答案 2 :(得分:3)
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"cellTimer";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];
NSInteger index = indexPath.row;
UILabel *titleLabel = (UILabel *)[cell viewWithTag:101];
UIButton *button = (UIButton *)[cell viewWithTag:100];
[button addTarget:self action:@selector(MethodName:) forControlEvents:UIControlEventTouchUpInside];
}
在XIB文件中设置UIButton和UILabel的标记TimerCell.xib
答案 3 :(得分:-3)
请在发布SO之前做更好的研究。 这是将Button添加到单元格
的代码UIButton *Button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[Button addTarget:self action:@selector(MethodName:) forControlEvents:UIControlEventTouchUpInside];
[Button setTitle:@"ButtonTitle" forState:UIControlStateNormal];
Button.frame = CGRectMake(100.0, 10.0, 40.0, 40.0);
[cell.contentView addSubview:Button];