如何显示一个日期picker,一个uipickerview和正常的键盘编辑点击文本字段在不同的条件下在表视图



我认为我正面临着一个独特的问题,为此我参考了以下链接链接1 &链接2已经,但我还没有能够完全解决我的问题,所以张贴我的查询在这里。我正在实现一个UITableview与40行使用11种不同类型的原型单元格。一个原型单元格有一个UILabel和一个UITextfield。现在,因为我使用标识符重用这个原型单元格,我想做以下事情:对于textfield的第0行,我想显示一个日期选择器视图。对于第一行,点击文本框,我想做正常的编辑。对于第2行,点击文本框,我想做正常的编辑。对于第三行单击textfield,我想显示一个选择器视图。沿着这条线,在特定的行中重复类似的模式。我的问题在于如何获取关于从哪一行传递委托的信息。下面是我的代码:

if (0 == indexPath.row)
    {
            cellIdentifier = @"CellLabelText";
            cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
            cellLabel = (UILabel *)[cell viewWithTag:101];
            cellLabel.text = [self.modelDataObj.labelTextArray objectAtIndex:indexPath.row];
            textField1 = (UITextField *)[cell viewWithTag:102];
            rowNum = indexPath.row;
            textField1.delegate = self;
            /*  
             placeholder text value is current date set (TBD)
             */
        }
        else if ((1 == indexPath.row) ||(2 == indexPath.row)||(3 == indexPath.row)||
                 (4 == indexPath.row) ||(6 == indexPath.row)||(10 == indexPath.row)||
                 (11 == indexPath.row)||(28 == indexPath.row)||(41 == indexPath.row))
        {
            cellIdentifier = @"CellLabelText";
            cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
            cellLabel = (UILabel *)[cell viewWithTag:101];
            cellLabel.text = [self.modelDataObj.labelTextArray objectAtIndex:indexPath.row];
            rowNum = indexPath.row;
            switch (indexPath.row) {
                case 1:
                            textField1 = (UITextField *)[cell viewWithTag:102];
                            textField1.delegate = self;
                            break;
                case 2:
                            textField1 = (UITextField *)[cell viewWithTag:102];
                            textField1.delegate = self;
                            break;
                case 3:
                            textField1 = (UITextField *)[cell viewWithTag:102];
                            textField1.delegate = self;
                            break;
                case 4:
                            textField1 = (UITextField *)[cell viewWithTag:102];
                            textField1.delegate = self;
                            break;
                case 6:
                            textField1 = (UITextField *)[cell viewWithTag:102];
                            textField1.delegate = self;
                            break;
                case 10:
                            textField1 = (UITextField *)[cell viewWithTag:102];
                            textField1.delegate = self;
                            break;
                case 11:
                            textField1 = (UITextField *)[cell viewWithTag:102];
                            textField1.delegate = self;
                            break;
                case 41:
                            textField1 = (UITextField *)[cell viewWithTag:102];
                            textField1.delegate = self;
                            break;
                case 28:
                            textField1 = (UITextField *)[cell viewWithTag:102];
                            textField1.delegate = self;
                            break;
                default:
                    break;
            }
        }

这是我的textShouldBeginEditing方法代码:

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    [textField resignFirstResponder];
    NSLog(@"In textFieldShouldBeginEditing");
    BOOL finalReturn;
    NSLog(@"row selected is %d", rowNum);
    UIViewController *vc = [[UIViewController alloc] init];
    UINavigationController *navc = [[UINavigationController alloc] initWithRootViewController:vc];
    if (0 == rowNum)//)
    {
        UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(5, 5, 300, 600)];
        datePicker.datePickerMode = UIDatePickerModeDate;
        datePicker.hidden = NO;
        datePicker.date = [NSDate date];
        [datePicker addTarget:self
                    action:@selector(changeDateInLabel:)
                    forControlEvents:UIControlEventValueChanged];
        [self.view addSubview:datePicker];
        UIBarButtonItem *donebtn = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(dismissPopoverAnimated:)];
        vc.navigationItem.rightBarButtonItem  = [[UIBarButtonItem alloc] init];
        [vc.navigationItem setRightBarButtonItem:donebtn animated:NO];
        [vc.view setBackgroundColor:[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0]];
        [vc.view addSubview:datePicker];
        self.popvc = [[UIPopoverController alloc] initWithContentViewController:navc];
        [self.popvc setPopoverContentSize:CGSizeMake(datePicker.bounds.size.width+(datePicker.frame.origin.y*2),250+(datePicker.frame.origin.x*2))];
            //NSLog(@"Height of the picker view while embedding in popover %f", pickerView.bounds.size.height);
        [self.popvc presentPopoverFromRect:textField.frame inView:textField.superview permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
        finalReturn = NO;
    }
    else if ((1 == rowNum) || (2 == rowNum))
    {
        finalReturn = YES;
    }
    else
    {
    finalReturn = YES;
    }
return finalReturn;
}

问题是rowNum被设置为当前可见且执行语句的行值。因此,如果rowNum的分配的最后一个语句发生在第12行,我将无法使用它在textFieldShouldBeginEditing中为第0行触发一个日期选择器,因为当它被设置为0时,textfield没有被单击,当它被单击rowNum被设置为12左右。基本上我是如何为第0行触发一个日期拾取器,为第3行,正常编辑为第1行& &;2,以此类推。我什么也看不清,我还在从不同的角度尝试。任何帮助都是非常感谢的。

在textFieldShouldBeginEditing中,尝试获得textField的父视图,这是表视图单元格的内容视图,并获得它的父视图,,这应该是一个表视图单元格。

之后,您可以找到特定表视图单元格的indexPath,并根据indexPath的行决定要显示什么。

相关内容

最新更新