tableview单元格内部的视图原点在ios中显示错误的框架

时间:2014-12-03 04:11:27

标签: ios objective-c iphone uitableview

我使用以下代码创建了应用。当我按下按钮时,日期选择器应该加载到相应的行中。但是datepicker总是在第一行加载。任何人都可以帮我这样做吗?

我的代码如下:

- (void)datePickerButtonPressed:(UIButton *)sender
{
if(self.datePicker == nil)
{
    self.datePicker = [[UIDatePicker alloc] init];
    [self.datePicker addTarget:self action:@selector(datePickerDateChanged:) forControlEvents:UIControlEventValueChanged];
}
NSMutableArray *items = [self.toolbar.items mutableCopy];
[items removeObjectAtIndex:2];
[items addObject:[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(datePickerDone:)]];
[self.toolbar setItems:items animated:YES];

CGPoint swipepoint = sender.center;
CGPoint rootViewPoint = [sender.superview convertPoint:swipepoint toView:self.goalDetailsTableview];
NSIndexPath *indexPath = [self.goalDetailsTableview indexPathForRowAtPoint:rootViewPoint];
NSLog(@"%@", indexPath);
GoalDetailsTableViewCell *cell = [self.goalDetailsTableview cellForRowAtIndexPath:indexPath];
self.datePicker.datePickerMode = UIDatePickerModeDateAndTime;

CGRect pickerRect = CGRectMake(cell.actionCardReminder.frame.origin.x, cell.actionCardReminder.frame.origin.y, 304, 204);
NSLog(@"%f  %f", cell.actionCardReminder.frame.origin.x, cell.actionCardReminder.frame.origin.y);
self.datePicker.frame = pickerRect;
self.datePicker.backgroundColor = [UIColor whiteColor];
self.datePicker.layer.cornerRadius = 5;

[self.goalDetailsTableview addSubview:self.datePicker];
}

提前致谢。

1 个答案:

答案 0 :(得分:1)

问题可能是由y的{​​{1}}位置引起的。

试试这个

pickerRect

在您的代码CGRect pickerRect = CGRectMake(cell.actionCardReminder.frame.origin.x, rootViewPoint.y, 304, 204); 中,请参阅cell.actionCardReminder.frame内的框架。因此cell位置也将是y框内的一个点。因此它将始终从第一行显示。更新cell将解决问题。