我在向表格视图单元格添加按钮时偶然发现了一个问题。
在我添加代码后,让我解释一下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
RadioCustomCell * cell = (RadioCustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[RadioCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
[cell setChannelImage:[UIImage imageNamed:@"p4.png"]];
UILabel *nowTitle = [UILabel alloc];
nowTitle.text = @"In My Heart";
[cell setNowTitle:nowTitle];
UILabel *nowArtist = [UILabel alloc];
nowArtist.text = @"Moby";
[cell setNowArtist:nowArtist];
UILabel *nextTitle = [UILabel alloc];
nextTitle.text = @"Only Girl (In The World)";
[cell setNextTitle:nextTitle];
UILabel *nextArtist = [UILabel alloc];
nextArtist.text = @"Rihanna";
[cell setNextArtist:nextArtist];
// My button right here
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(6 ,31, 110, 20);
[button setImage:[UIImage imageNamed:@"radionorge.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(touched:) forControlEvents:UIControlEventTouchUpInside];
[cell.backView addSubview:button];
}
return cell;
}
按钮动作的“触摸”功能。
-(void)touched:(id)Sender {
// Here i want to get the UILabels for each cell. Such as nowArtist.
}
你看,我想在触摸功能的每个单元格中获取UILabel文本。 我知道你必须以某种方式使用Sender作为指针,但我不知道如何。
答案 0 :(得分:0)
UIButton有一个名为“tag”的属性,它的目的正是用于识别按钮,尝试设置一个值,通过在tag属性中设置索引来帮助您找到所需的值。
答案 1 :(得分:0)
首先,您需要为每个标签设置标签属性。使用#define或const是一个好主意,但为了简单起见,我假设您将按照它们在代码中出现的顺序为每个UILabel使用1,2,3和4。
这就是你的动作代码应该是什么样子。 (您可能需要稍微调整一下。)
-(void)touched:(id)Sender {
// Here i want to get the UILabels for each cell. Such as nowArtist.
if ([sender isKindOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)sender;
UIView *contentView = button.superview;
UIView *viewWithTag1 = [contentView viewWithTag:1];
if ([viewWithTag1 isKindOfClass:[UILabel class]]) {
UILabel *titleLabel = (UILabel *)viewWithTag1;
// You now have the title label.
}
// Repeat the above for each tag.
}
一个观察结果:你在代码中泄漏了很多对象。每次更新单元格时都不需要分配一堆新标签。只需使用:
cell.nowTitle.text = @"In My Heart";
答案 2 :(得分:0)
我想让你想在表格行的触摸事件中执行特定的代码。 看看这对你有意义。
答案 3 :(得分:0)
我们大多数人都不熟悉另一种方法,我认为它非常有用。检查下面。
- (void)touched:(id)sender {
UIButton *btn = (UIButton *)sender;
NSIndexPath *indexpath = [self.tableview indexPathForRowAtPoint:btn.center];
RadioCustomCell *currentCell = (RadioCustomCell *)[tableview cellForRowAtIndexPath:indexpath]
UILabel *titleLabel = (UILabel *)[currentCell viewWithTag:YourTag];
}