我有一个问题,我希望你们中的一个人可以建议一个更好的方法来完成我想要做的事情。
所以我有一个带有项目列表的UITableView。每个tableview行都有一个“Add”按钮。按下添加按钮后,所选项目将添加到主列表中。 (想想一个待办事项应用程序),工作正常,没有问题。我想要的是该项目被添加到列表中的某种类型的通知。例如,添加两秒钟的同一行上出现的复选标记然后消失。这是我的代码:
-(void)addToList:(id)sender event:(id)event{
//This is the add button method on each cell.
NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:self.theTableView];
NSIndexPath *indexPath = [self.theTableView indexPathForRowAtPoint: currentTouchPosition];
//Check image is the image of the checkmark that I want to display when the user adds an item.
checkImage.alpha = 0.0f;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.7f];
checkImage.alpha = 1.0f;
checkImage.frame = CGRectMake(currentTouchPosition.x + 100, currentTouchPosition.y, 25, 25);
[UIView commitAnimations];
....[only relevant code shown]...
}
当用户点击添加按钮时,checkImage会淡入并将其自定位于用户触摸行+ 100像素的位置。这样可以正常工作,但它不会将复选标记放在行的中心,它可能位于中心,靠近顶部或靠近底部,具体取决于用户点击添加按钮的位置。我需要它在中心,或以不同的方式来解决这个问题。有什么建议?谢谢!
答案 0 :(得分:0)
获得indexPath
后,使用
UITableViewCell * cell = [self.theTableView cellForRowAtIndexPath:indexPath];
CGSize cellSize = cell.contentView.frame.size;
以后,
CGPoint touchPositionInCell = [self.theTableView convertPoint:currentTouchLocation toView:cell.contentView];
CGPoint checkmarkCenter = CGPointMake(touchPositionInCell.x + 100, cellSize.height/2);
CGRect checkmarkFrame = CGRectZero;
checkmarkFrame.origin = checkmarkCenter;
checkmarkFrame = CGRectInset(checkmarkFrame, -12, -12);
checkImage.frame = checkmarkFrame;
[cell.contentView addSubview:checkImage];
这应该将复选标记置于垂直中心。
我希望您了解可重复使用细胞的概念。尝试记住indexPath
所在单元格的checkImage
。如果您在该indexPath上看到对单元格的请求,请添加checkImage
作为其子视图。