gpt4 book ai didi

iphone - 如何在 UITableView 行之间创建工具栏

转载 作者:太空狗 更新时间:2023-10-30 03:11:08 25 4
gpt4 key购买 nike

我对 tweetbot 如何执行以下操作很感兴趣:

Enter image description here

我想用我的应用创建同样的东西,如果你点击一行,它会弹出一个额外的 UIToolBar 并按下任何其他行将使用动画关闭此 View 。

我认为逻辑很简单,你只需要在按下时向 UITableViewCell 添加一个 subview 并将其余内容向上移动,但是当我按下另一行时你如何实际关闭它?

最佳答案

执行此操作的最佳方法是在被点击的单元格下方添加一个虚拟单元格。

首先,您需要跟踪哪个单元格被点击并采取相应的行动。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

//if user tapped the same row twice let's start getting rid of the control cell
if([indexPath isEqual:self.tappedIndexPath]){
[tableView deselectRowAtIndexPath:indexPath animated:NO];
}

//update the indexpath if needed... I explain this below
indexPath = [self modelIndexPathforIndexPath:indexPath];

//pointer to delete the control cell
NSIndexPath *indexPathToDelete = self.controlRowIndexPath;

//if in fact I tapped the same row twice lets clear our tapping trackers
if([indexPath isEqual:self.tappedIndexPath]){
self.tappedIndexPath = nil;
self.controlRowIndexPath = nil;
}
//otherwise let's update them appropriately
else{
self.tappedIndexPath = indexPath; //the row the user just tapped.
//Now I set the location of where I need to add the dummy cell
self.controlRowIndexPath = [NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section];
}

//all logic is done, lets start updating the table
[tableView beginUpdates];

//lets delete the control cell, either the user tapped the same row twice or tapped another row
if(indexPathToDelete){
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPathToDelete]
withRowAnimation:UITableViewRowAnimationNone];
}
//lets add the new control cell in the right place
if(self.controlRowIndexPath){
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:self.controlRowIndexPath]
withRowAnimation:UITableViewRowAnimationNone];
}

//and we are done...
[tableView endUpdates];
}

只要你有那个虚拟单元格,你就必须确保发送正确的计数。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(self.controlRowIndexPath){
return modelArray.count + 1;
}
return self.modelArray.count;
}

此外,为您的 ControlCell 返回适当的高度。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath   *)indexPath 
{
if([indexPath isEqual:self.controlRowIndexPath]){
return 45; //height for control cell
}
return 70; //height for every other cell
}

最后,请记住控制单元是一个虚拟单元。不是模型的一部分,因此您必须考虑到这一点。如果用户点击最后点击行上方的一行是可以的,但是当新点击的行位于该控制单元格下方时,您必须确保访问模型中的正确行。换句话说,考虑 View 中间的那个假单元格。

- (NSIndexPath *)modelIndexPathforIndexPath:(NSIndexPath *)indexPath
{
int whereIsTheControlRow = self.controlRowIndexPath.row;
if(self.controlRowIndexPath != nil && indexPath.row > whereIsTheControlRow)
return [NSIndexPath indexPathForRow:indexPath.row - 1 inSection:0];
return indexPath;
}

希望对您有所帮助。

关于iphone - 如何在 UITableView 行之间创建工具栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5952691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com