gpt4 book ai didi

objective-c - 委托(delegate)方法 'canMoveRowAtIndexPath' 的目的是什么?

转载 作者:行者123 更新时间:2023-12-01 18:28:31 25 4
gpt4 key购买 nike

我现在正在开发一个 UI 组件,因为它的行为类似于 UITableView,所以我在 UITableView 之后对委托(delegate)和数据源协议(protocol)进行了大量建模。但是,我注意到一种我不太了解的方法——“canMoveRowAtIndexPath”。

这实质上允许代理指定它是否希望给定的单元格是“可移动的”。但是,将另一个可移动单元格放入比不可移动单元格更高的索引(即在表格中的“上方”)不会导致它间接移动吗? (因为被移动的单元格下方的每个单元格都会被向下推一排)。

所以基本上,我的问题是这种方法的意义何在?任何人都可以提供一个示例用例吗?因为我正在争论我是否应该费心将它包含在我的组件中。

如果有的话,我认为更有用的委托(delegate)方法可能是诸如“canMoveRowInSection”之类的东西,它允许您指定是否可以移动给定部分中的任何行。这将允许您禁用特定部分的重新排序,并且将其他行移到该部分之外不会影响其中行的顺序。

我知道 Apple 工程师提供这种方法是有原因的,我只是看不出这个原因可能是什么。

感谢您的任何见解!

最佳答案

canMoveRowAtIndexPath 告诉 UITableView 如果表格处于编辑模式,则可以上下移动单元格(或单元格,如果您特别选择)。

由开发人员负责处理该 Action 的另一面。

例如,假设您有一个由“A”、“B”、“C”组成的数组(确切地说是 NSMutableArray),并且您想将该数组重新排列为“B”、“C”、“A”。您需要根据要移动的单元格的位置在数组中进行更改并保存该数组。

例子

-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
id objectToMove = [[array objectAtIndex:fromIndexPath.row] retain];
[array removeObjectAtIndex:fromIndexPath.row];
[array insertObject:objectToMove atIndex:toIndexPath.row];
[objectToMove release];
}

部分示例

此示例说明如果表格部分为 0,则任何单元格都不能移动。任何其他部分(比如你有 3 个),第 1 和第 2 部分中的那些单元格可以移动。您仍然需要相应地处理数组。
-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath 
{
if ( indexPath.section == 0 )
return NO;

return YES;
}

关于objective-c - 委托(delegate)方法 'canMoveRowAtIndexPath' 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10887162/

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