我想能夠在另一個單元格上拖動一個單元格,並且當我釋放時它將有效地「合併」單元格(顯示另一個單元格)。我不確定UITableView
是最佳控制還是UICollectionView
。有沒有人有任何想法如何進行?合併UITableViewCells
回答
下面是我用僞代碼開發它的解決方案。
- 添加
UILongPressGestureRecognizer
到UITableView的 - 在
UIGestureRecognizerStateBegan
,使用[UITableView indexPathForRowAtPoint]
,以確定正在「長按」是什麼細胞。你將把這個單元格變成懸停UITableViewCell
。 - 將參考變量設置爲相應的模型對象。
- 使用
UIGraphicsBeginImageContextWithOptions
來呈現實際的UITableViewCell內容的圖像。創建一個UIImageView
並添加一些自定義鉻(陰影等) - 將自定義UIImageView作爲子視圖添加到UITableView,並刪除原始選擇固定 UITableViewCell(removeFromSuperview)。
- 在
UIGestureRecognizerStateChanged
,計算懸停在UITableView
UITableViewCell
的位置和動畫釘扎細胞。 (您還需要切換先前突出顯示的固定格單元的動畫)。 - 當用戶發佈LongPress時,您需要重新訂購模型陣列,刪除底層的固定的單元格,然後在
beginUpdates
調用中重新加載UITableView
。
還有一些其他的事情要注意,如滾動,當你打的邊界條件,在原來的位置下降懸停細胞等但這是它的基本精神。希望有幫助。
你有這樣的一些示例代碼?我試圖做同樣的事情,但沒有多少運氣。 – Imran 2015-11-29 12:30:18
可能是我沒有得到你,但正如我得到的,你想通過拖動合併單元格,所以實現一些代碼給你。看看這個。
如果妳想做這樣的事情...
使用編輯代碼這樣的:---
的viewDidLoad初始化數組,並設置表格編輯模式:
fruitsArray=[[NSMutableArray alloc] initWithObjects:@"Apple",@"Banana",@"Mango",@"Guava",@"PineApple",@"Watermelon",@"Grapes",@"GroundNut",@"Muskmelon",@"Orange",@"Cherry",nil];
[tblView setEditing:YES];
tableView的數據源設置爲: - >
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewCellEditingStyleNone;
}
- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
return NO;
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
if (sourceIndexPath.row!=destinationIndexPath.row) {
NSString *sourceString=[fruitsArray objectAtIndex:sourceIndexPath.row];
NSString *destinationString=[fruitsArray objectAtIndex:destinationIndexPath.row];
destinationString=[destinationString stringByAppendingFormat:@",%@",sourceString];
[fruitsArray replaceObjectAtIndex:destinationIndexPath.row withObject:destinationString];
[fruitsArray removeObjectAtIndex:sourceIndexPath.row];
[tblView reloadData];
}
}
試試這個sampleCode
爲什麼不在'moveRowAtIndexPath'' if'使用'!='運算符? – 2013-07-22 19:05:07
這是問題的一個簡單部分,做一個很好的過渡來合併單元格將是一件困難的事情。 – Can 2013-07-22 19:11:10
是的,您需要通過在'heightForRowAtIndexPath:'方法中更改單元格來保存單元格的高度。 – 2013-07-22 19:31:45
我用長按手勢這一點。這裏是示例代碼
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:cell action:nil];
longPress.delegate = self;
[cell addGestureRecognizer:longPress];
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
if([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]){
[gestureRecognizer addTarget:self action:@selector(moveRight:)];
}
return YES;
if([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){
[gestureRecognizer addTarget:self action:@selector(tapAction:)];
}
return YES;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
- (void)moveRight:(UILongPressGestureRecognizer *)sender {
/*if (sender.view.tag==4)
{
[super setEditing:YES animated:YES];
[self.Table4 setEditing:YES animated:YES];
}
else
{
*/
UIView *view = sender.view;
int t = sender.view.tag;
CGPoint point = [sender locationInView:view.superview];
NSLog(@"its added %f", point.x);
NSLog(@"its added %f", point.y);
// view.frame = CGRectMake(sender.view.frame.origin.x, sender.view.frame.origin.y+200,200, 30);
CGPoint center = view.center;
center.x = point.x ;
center.y = point.y ;
view.center = center;
[self.view addSubview:view];
// int x = Table4.frame.origin.x;
// int y = Table4.frame.origin.y;
if (sender.state == UIGestureRecognizerStateChanged) {
CGPoint center = view.center;
center.x += point.x - _priorPoint.x;
center.y += point.y - _priorPoint.y;
NSLog(@"its Center %f", center.x);
if (center.x > Table4.frame.origin.x &&
center.x < Table4.frame.origin.x +
Table4.frame.size.width &&
center.y > Table4.frame.origin.y &&
center.y < Table4.frame.origin.y +
Table4.frame.size.height
)
{
int count = [self.rowdata count];
if (t>=100 && t<200)
{
t=t-100;
[self.rowdata insertObject:[listData objectAtIndex:t] atIndex:count];
}
else if (t>=200 && t<300)
{
t=t-200;
[self.rowdata insertObject:[listData2 objectAtIndex:t] atIndex:count];
}
else
{
t=t-300;
[self.rowdata insertObject:[listData3 objectAtIndex:t] atIndex:count];
}
//[self.rowdata addObject:[listData objectAtIndex:t]];
//[sender release];
[Table4 reloadData];
[Table1 reloadData];
[Table2 reloadData];
[Table3 reloadData];
}
view.center = center;
//}
_priorPoint = point;
}
}
我認爲這對你很有幫助。採取一些你想要的代碼。
- 1. UITableViewCells
- 2. 防止UITableViewCells出隊並重新加載
- 3. UITableViews和UITableViewCells
- 4. UITableViewCells壞了
- 5. UITableViewCells重疊
- 6. 使UITableViewCells流血
- 7. UItableViewCells重複
- 8. 聊天與UITableViewCells
- 9. UIAccessibility to delete UITableViewCells
- 10. 輪換重繪UITableViewCells
- 11. 卸載特定UITableViewCells
- 12. uitableviewcells,設計考慮
- 13. 如何刪除UITableViewCells
- 14. 不同UITableViewCells重疊
- 15. 如何重用UITableViewCells
- 16. 重繪UITableView或UITableViewCells
- 17. 複製UITableViewCells錯誤
- 18. 如何重疊UITableViewCells?
- 19. 自定義UITabBarController.moreNavigationController UITableViewCells
- 20. 使UITableviewCells可刪除
- 21. iOS - 初始化uitableViewCells?
- 22. 如何定義uitableviewcells
- 23. 堆疊/重疊UITableViewCells
- 24. 添加2個UITableviewCells之間UITableViewCells與動畫
- 25. 計算適合固定空間的UITableViewCells的數量
- 26. 滾動後自定義UITableViewCells的UITextField混合
- 27. UITableView與自定義UITableViewCells混合滾動內容
- 28. 2 UITableViewCells沒有自定義背景圖像並排?
- 29. 如何使用UINib實例化並使用自定義的UITableViewCells
- 30. 添加的NSString特別UITableViewCells
意思是說,你想把兩個單元合併成一個。對? – 2013-04-27 06:07:27
這是正確的。我想從UITableView中「取消」現有的單元格,將它移到現有的單元格上(提供指示哪個單元格),然後刪除有效合併它的單元格。下面的集合是一個「合併模型」和「獨立模型」的包。 – Clay 2013-04-29 16:07:30
完成!這並不像我想象的那麼糟糕。 – Clay 2013-05-03 21:33:43