猿问

当选择UITableViewCell时,您能在UITableViewCell上动画化高度更改吗?

当选择UITableViewCell时,您能在UITableViewCell上动画化高度更改吗?

我用的是UITableView在我的iPhone应用程序中,我有一个属于一个组的人的列表。我希望这样,当用户单击某个特定的人(从而选择该单元格)时,该单元格的高度将显示多个UI控件,用于编辑该用户的属性。

这个是可能的吗?


LEATH
浏览 708回答 3
3回答

www说

我找到了一个非常简单的解决方案,作为对UITableView我在工作.将单元格高度存储在通常通过tableView: heightForRowAtIndexPath:,然后,当您想要动画的高度变化,只需更改变量的值,并调用.[tableView beginUpdates];[tableView endUpdates];您会发现它不能完成完全的重新加载,但是对于UITableView要知道它必须重新绘制细胞,为细胞获取新的高度值.你猜怎么着?它为你激活了变化。甜。我有一个更详细的解释和完整的代码样本在我的博客.。动画UITableView单元格高度更改

哔哔one

我喜欢西蒙·李的回答。我实际上没有尝试过这个方法,但是看起来它会改变列表中所有单元格的大小。我只是想换个被窃听的手机。我做的有点像西蒙,但只是有点不同。这将在选定单元格时更改其外观。它确实有生命。只是另一种方法。创建一个int来保存当前选定单元格索引的值:int currentSelection;然后:- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {     int row = [indexPath row];     selectedNumber = row;     [tableView beginUpdates];     [tableView endUpdates];}然后:- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {     if ([indexPath row] == currentSelection) {         return  80;     }     else return 40;}我相信您可以在tableView:cellForRowAtIndexPath:更改单元格的类型,甚至为单元格加载XIB文件中进行类似的更改。像这样,CurentSelections将从0开始。如果不希望列表的第一个单元格(索引0)看起来是默认选中的,则需要进行调整。

临摹微笑

添加一个属性来跟踪所选单元格@property (nonatomic) int currentSelection;将其设置为一个哨位值(例如)viewDidLoad,以确保UITableView从“正常”位置开始- (void)viewDidLoad{     [super viewDidLoad];     // Do any additional setup after loading the view.     //sentinel     self.currentSelection = -1;}在……里面heightForRowAtIndexPath可以为选定的单元格设置所需的高度。- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{     int rowHeight;     if ([indexPath row] == self.currentSelection) {         rowHeight = self.newCellHeight;     } else rowHeight = 57.0f;     return rowHeight;}在……里面didSelectRowAtIndexPath如果需要,可以保存当前选择的内容并保存动态高度。- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {         // do things with your cell here         // set selection         self.currentSelection = indexPath.row;         // save height for full text label         self.newCellHeight = cell.titleLbl.frame.size.height + cell.descriptionLbl.frame.size.height + 10;         // animate         [tableView beginUpdates];         [tableView endUpdates];     }}在……里面didDeselectRowAtIndexPath将选择索引设置为前哨值,并使单元格恢复正常形式。- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {                // do things with your cell here         // sentinel         self.currentSelection = -1;         // animate         [tableView beginUpdates];         [tableView endUpdates];     }}
随时随地看视频慕课网APP

相关分类

iOS
我要回答