首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在tableview中显示日期选择器、uipickerview和在不同情况下单击文本字段时的正常键盘编辑?

如何在tableview中显示日期选择器、uipickerview和在不同情况下单击文本字段时的正常键盘编辑?
EN

Stack Overflow用户
提问于 2013-05-28 03:54:48
回答 1查看 368关注 0票数 0

在我看来,我正面临着一个独特的问题,对于这个问题,我已经参考了以下链接link 1 & link 2,但我还没有完全解决这些问题,所以在这里发布我的问题。我正在使用11种不同类型的原型单元实现一个40行的UITableview。其中一个原型单元具有UILabel和UITextfield。现在,由于我使用标识符重用了这个原型单元格,我希望执行以下操作:对于单击textfield时的第0行,我希望显示一个datepicker视图。对于第1行,单击文本字段时,我想做正常的编辑。对于第二行,点击文本字段,我想做正常的编辑。对于第3行,单击文本字段时,我想显示一个选取器视图。并且沿着线路向下对于特定行重复类似的图案。我的问题在于如何获得关于委托是从哪一行传递过来的信息。下面是我的代码:

代码语言:javascript
复制
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方法代码:

代码语言:javascript
复制
-(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;
}

问题是,对于当前可见且执行了satement的行,rowNum被设置为value。因此,如果赋值rowNum的最后一条语句发生在第12行,我将不能使用它来触发textFieldShouldBeginEditing中第0行的日期选择器,因为当它被设置为0时,文本字段没有被单击,而当它被单击时,rowNum被设置为12左右。基本上,我如何触发行0的datepicker,行3的uipicker,行1和2的普通编辑,等等。我找不到任何东西,我还在尝试不同的角度。任何帮助我们都深表感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-28 12:55:14

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16779730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档