我正在使用XCode的基于导航的应用程序模板来创建一个以UITableView为中心的应用程序。
当用户在UITableView中选择一行时,我想在所选单元格内部显示一个按钮。我想只在选定的单元格中显示此按钮,而不是在任何其他单元格中。如果用户之后选择不同的小区,则同样如此。
我该怎么做呢?有可能吗?
答案 0 :(得分:3)
UITableViewCell子类并添加按钮。
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
[button setFrame:CGRectMake(320.0 - 90.0, 6.0, 80.0, 30.0)];
[button setTitle:@"Done" forState:UIControlStateNormal];
button.hidden = YES;
[self.contentView addSubview:button];
}
return self;
}
然后覆盖setSelected,如下所示:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
self.button.hidden = !selected;
}
答案 1 :(得分:1)
应该可以使用以下内容:
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
if (lastClickedCell != nil) {
// need to remove button from contentView;
NSArray *subviews = lastClickedCell.contentView.subviews;
for (UIButton *button in subviews) {
[button removeFromSuperview];
}
}
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
// this gives you a reference to the cell you wish to change;
UIButton *cellButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // you can change the type to whatever you want
[cellButton setFrame:CGRectMake(x, y, w, h)]; // you will need to set the x,y,w,h values to what you want
// if you want the button to do something, you will need the next line;
[cellButton addTarget:self action:@selector(someMethod) forControlEvents:UIControlEventTouchUpInside];
// now you will need to place the button in your cell;
[cell.contentView addSubview:cellButton];
[tableView reloadData]; // this updates the table view so it shows the button;
lastClickedCell = cell; // keeps track of the cell to remove the button later;
}
编辑:当您选择新单元格时,您当然需要从contentView中删除该按钮,因此您需要一点逻辑。子类化可能是一个更简单的解决方案,但如果您不想使用子类,则这是您需要采用的路径。例如,您需要在标题中声明以下内容。
UITableViewCell *lastClickedCell;
然后你会想把它加入到上面(我将改为把它放进去);
答案 2 :(得分:0)
您是否查看了developer.apple.com以获取UITableViewController和UIButton的文档?
答案 3 :(得分:0)
这是一个简单的解决方案!
在viewDidLoad函数之类的地方创建你的按钮(确保它在.h文件中声明,以便你可以从任何地方引用它)
在 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
添加以下内容:
if (yourButton)
[yourButton removeFromSuperview];
[[tableView cellForRowAtIndexPath:indexPath] addSubview:yourButton];
[yourButton setSelected:NO];
[yourButton setHighlighted:NO];