我对ipod编程很新,所以请耐心等待。
我试图让cellView中的按钮具有每个单元格的2个值之一,a +和a - 。意思是,按钮会显示+,当你点击它时,它会跳转到 - 。
我设法让按钮工作并更改底层数据,但是在重绘表时我遇到了麻烦。
我添加了注释,我需要将按钮的文本更改为源代码。可以这样做,还是我必须建立一个自定义的uitableviewcell?
Tia,Stefano。
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger section = [indexPath section];
NSUInteger row = [indexPath row];
//some code
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
SectionsTableIdentifier ];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:SectionsTableIdentifier] autorelease];
UIImage *buttonUpImage = [UIImage imageNamed:@"button_up.png"];
UIImage *buttonDownImage = [UIImage imageNamed:@"button_down.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0.0, 0.0, buttonUpImage.size.width, buttonUpImage.size.height);
[button setBackgroundImage:buttonUpImage forState:UIControlStateNormal];
[button setBackgroundImage:buttonDownImage forState:UIControlStateHighlighted];
if (some condition) [button setTitle:@"+" forState:UIControlStateNormal];
else [button setTitle:@"-" forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
cell.accessoryView = button;
}
if (someCondition) {
cell.textLabel.text = @"text1";
}else {
cell.textLabel.text = @"text2";
}
//I NEED TO CHANGE THE TEXT FOR THE BUTTON HERE.
return cell;
}
答案 0 :(得分:2)
由于您正在将按钮设置为单元格的accessoryView,您可以执行以下操作:
UIButton *accButton = (UIButton *)cell.accessoryView;
[accButton setTitle:@"New Text" forState:UIControlStateNormal];
答案 1 :(得分:1)
cell
通常不会为nil,这意味着您的单元格设置代码通常会被跳过。您需要确保条件中的每单元设置代码不,但是在其后面的代码中。
这样的事情:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger section = [indexPath section];
NSUInteger row = [indexPath row];
//some code
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
SectionsTableIdentifier ];
if (cell == nil) {
// Note that here, we set up only the things that will not change.
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:SectionsTableIdentifier] autorelease];
UIImage *buttonUpImage = [UIImage imageNamed:@"button_up.png"];
UIImage *buttonDownImage = [UIImage imageNamed:@"button_down.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0.0, 0.0, buttonUpImage.size.width, buttonUpImage.size.height);
[button setBackgroundImage:buttonUpImage forState:UIControlStateNormal];
[button setBackgroundImage:buttonDownImage forState:UIControlStateHighlighted];
[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
cell.accessoryView = button;
}
UIButton *button = (UIButton *)cell.accessoryView; // get button back, regardless of if we went through init above
if (someCondition) {
cell.textLabel.text = @"text1";
[button setTitle:@"+" forState:UIControlStateNormal];
}else {
cell.textLabel.text = @"text2";
[button setTitle:@"-" forState:UIControlStateNormal];
}
return cell;
}
答案 2 :(得分:0)
您需要以与设置背景图像相同的方式设置文本 - 您必须将其设置为特定的控件状态。
如果您只是尝试更改myButton.text,它将不会显示。
正确的代码是:
[button setText:@"Some Text" forState:UIControlStateNormal];
答案 3 :(得分:0)
我相信在向上和向下滚动表格时也会遇到问题。所有单元格都具有相同的标识符,它们将在刷新时重复使用。这意味着单元格并不总是零。因此,附件按钮标题应在条件if (cell == nil) {}
答案 4 :(得分:0)
您需要将代码设置按钮的文本向下移动到评论所在的位置。这里的问题是访问您没有指针的按钮。一种方法是在设置单元格时为按钮分配标记,并请求带有该标记的子视图以便稍后获取该单元格。
更好的方法是使用自定义表格视图单元格,如您所示。这项工作并不多,如果您提供房产,您可以直接访问其内容。此外,您可以将状态更改的逻辑推送到该类中。