从UIDatePicker设置详细文本标签

时间:2014-04-30 15:12:59

标签: ios uitableview uidatepicker

xcode开始构建tableView之前,@"Date"没有遇到麻烦。所有这些都是在代码中完成的,我不喜欢使用界面构建器。有一个字符串detailTextLabel来保持它的位置。该表是可变的,每次在导航栏上选择添加按钮时,都会添加新的单元格。我在选定单元格中设置UIDatePicker时遇到问题。我创建了deatailTextLabel来选择日期并将其保存到所选单元格中的UIDatePicker。我在每个单元格上都有一个按钮,它会显示detailTextLabel,并且所有内容都应该关闭。但我不知道如何将UIDatePicker设置为- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *aTableIdentifier = @"aTableIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: aTableIdentifier]; if(cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:aTableIdentifier]; } NSUInteger row = [indexPath row]; cell.textLabel.text = [workoutName objectAtIndex:row]; cell.detailTextLabel.text = @"Date"; self.setDate = [UIButton buttonWithType:UIButtonTypeSystem]; self.setDate.frame = CGRectMake(268, 10.0, 44.0, 44.0); [self.setDate setTitle:@"Date" forState:UIControlStateNormal]; [self.setDate setTitleColor:[UIColor grayColor] forState:UIControlStateSelected]; [cell addSubview:self.setDate]; [self.setDate addTarget:self action:@selector(showDatePicker) forControlEvents:UIControlEventTouchUpInside]; return cell; } -(void)showDatePicker{ self.myDatePicker = [UIDatePicker new]; self.myDatePicker.frame = CGRectMake(0,275, 320, 210); self.myDatePicker.backgroundColor = [UIColor clearColor]; self.myDatePicker.datePickerMode = UIDatePickerModeDate; [self.view addSubview:self.myDatePicker]; UITapGestureRecognizer *tapGestureRecognize = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissDatePicker:)]; tapGestureRecognize.numberOfTapsRequired = 1; [self.view addGestureRecognizer:tapGestureRecognize]; } -(void)dismissDatePicker:(UIGestureRecognizer *)gestureRecognizer { NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init]; [outputFormatter setDateFormat:@"MMMM dd yyyy"]; [outputFormatter stringFromDate:self.myDatePicker.date]; dateLabel = [[UILabel alloc] init]; dateLabel.text = [outputFormatter stringFromDate:self.myDatePicker.date]; [self.myDatePicker removeFromSuperview]; [self.view removeGestureRecognizer:gestureRecognizer]; } 关闭时所选的日期。

viewController

现在我不确定我是否正确设置了这张桌子(很可能没有),因为当我选择一个单元格时,它会推送到另一个{{1}},但是没有显示正确的信息(现在不是我的问题)。

1 个答案:

答案 0 :(得分:0)

最简单的方法是让UITableViewCell子类具有UIButton属性,或者设置completionHandler块,或者将UIDatePickerDelegate设置为UITableViewCell子类,但只是使用你所呈现的内容,这是一个可能未经测试的解决方案:

注意:这假设您在从日期选择器中进行选择的过程中无法向表中添加行。这也假设您的表中只有1个部分。

你可以设置"标签"每个" setDate"的属性按钮到"行" cellForRowAtIndexPath:函数内的整数,如下所示:

self.setDate.tag = row;

然后改变这一行:

[self.setDate addTarget:self action:@selector(showDatePicker) forControlEvents:UIControlEventTouchUpInside];

对此:

[self.setDate addTarget:self action:@selector(showDatePicker:) forControlEvents:UIControlEventTouchUpInside];

将冒号添加到' showDatePicker'的末尾。将发送按钮对象和方法。然后,您必须更改showDatePicker方法以接受按钮对象,如下所示:

-(void)showDatePicker:(id)sender

然后使用'发件人' object(这是你的setDate按钮),如下所示:

UIButton *button = (UIButton*)sender;

然后,您就可以获得'标记'属性关闭按钮,这是按钮对应的表的行。将其作为标记分配给“tapGestureRecognize”'像这样:

tapGestureRecognize.tag = button.tag;

然后方法dismissDatePicker' gestureRecognizer' object将包含标记,该标记再次对应于用户正在编辑的表行。重新创建单元格:

NSIndexPath *cellIndexPath = [NSIndexPath indexPathForRow:gestureRecognizer.tag inSection:0];

让我们说你的UITableView被命名为“myTableView'”。您可以像这样获得对原始单元格的引用:

UITableViewCell *theCell = [self.myTableView cellForRowAtIndexPath:cellIndexPath];

最后,您可以更改单元格的detailTextView:

theCell.detailTextLabel.text = [outputFormatter stringFromDate:self.myDatePicker.date];