0

私の意見では、リンク リンク 1リンク 2を参照した固有の問題に直面しています。 すでに問題を完全に解決できていないので、ここにクエリを投稿してください。11 種類のプロトタイプ セルを使用して 40 行の UITableview を実装しています。プロトタイプ セルの 1 つは、UILabel と UITextfield を持っています。識別子を使用してこのプロトタイプ セルを再利用しているので、次のことを行いたいと考えています。テキストフィールドのクリックで行1の場合、通常の編集を行います。テキストフィールドのクリックで行2の場合、通常の編集を行います。テキストフィールドをクリックして3行目にピッカービューを表示したい。同様のパターンが特定の行で繰り返されます。私の問題は、デリゲートがどの行から渡されたかに関する情報を取得する方法に関する事実にあります。ここに私のコードがあります:

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 の日付ピッカーを起動するために使用することはできません。 12前後に設定されています。基本的に、行 0 の日付ピッカー、行 3 の uipicker、行 1 と 2 の通常の編集などを起動するにはどうすればよいですか。私は何も理解することができず、私はまだそれをさまざまな角度から試しています。どんな助けでも大歓迎です。

4

1 に答える 1