0

そのため、iOS 7 では、iOS 6 ではほとんど問題なく動作していた問題が少し発生しています (これはよく言われていることですが、これは奇妙です)。とにかく、ストーリーボードアプリがあり、TableView にはいくつかのプロトタイプセルがあり、1 つのセクションにはいくつかのラベルがあり、次に応答を入力するための TextView があります。iOS6 では、ユーザーが TextView をクリックすると、TextView がキーボードの上に表示されるようにテーブルがスクロールされますが、iOS 6 では (画面が小さいため 4s iphone でのみ) キーボードがスライドします。上に移動すると、TableView は十分にスライドするだけなので、TableViewCell 全体がまだ表示されているため、TextView はキーボードの後ろの半分になります。TextView がキーボードによってブロックされているため、1 行のテキストを入力した後、ユーザーは他に何を入力しているのかわからないため、これは面倒です。TableView はセルとヘッダーを表示するのに十分なだけスクロールするため、セクションの最初のセルではさらに悪化します。コードを見ることが役立つかどうかはわかりませんが、以下に投稿します(また、デフォルトでは、セルはラベルを表示するのに十分な高さであり、ユーザーがセルをクリックすると、そのセルの高さが拡張されますラベルの下に TextView と Buttons を表示します)

if ([indexPath section] == 1) {
        if ([btrArray count] > 0) {
            BTRCustomCell *btrCell = [tableView dequeueReusableCellWithIdentifier:@"BTRCell"];



            //Check if BTR Row has been selected to expand View
            if (row == btrSelectedRow) {
                CGRect extended = btrCell.reasonLbl.frame;
                extended.size.height = 70;
                btrCell.reasonLbl.frame = extended;
                btrCell.responseTV.hidden = NO;
                btrCell.ackButton.hidden = NO;
                btrCell.replyButton.hidden = NO;
            }
            else {
                CGRect normal = btrCell.reasonLbl.frame;
                normal.size.height = 30;
                btrCell.reasonLbl.frame = normal;
                btrCell.responseTV.hidden = YES;
                btrCell.ackButton.hidden = YES;
                btrCell.replyButton.hidden = YES;
            }

//leaving out the lines that just add text to labels
btrCell.responseTV.textColor = [UIColor lightGrayColor];
            [[btrCell.responseTV layer] setBorderColor:[[UIColor lightGrayColor] CGColor]];
            [[btrCell.responseTV layer] setBorderWidth:2.3];
            [[btrCell.responseTV layer] setCornerRadius:15];
            btrCell.responseTV.tag = kBTRTextView + row;
            btrCell.responseTV.delegate = self;

            //Add Keybar to TextView
            UIToolbar *keyBar = [[UIToolbar alloc] init];
            [keyBar setTintColor:MobileThemeColor];
            [keyBar sizeToFit];

            UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
            UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(resignKeyboard:)];
            doneButton.tag = kBTRDoneButton + row;
            NSArray *itemArray = [NSArray arrayWithObjects:flexButton, doneButton, nil];
            [keyBar setItems:itemArray];

            [btrCell.responseTV setInputAccessoryView:keyBar];

            //Add Targets To Buttons
            [btrCell.ackButton addTarget:self action:@selector(AcknowledgeButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
            btrCell.ackButton.tag = kBTRAckButton + row;
            [btrCell.replyButton addTarget:self action:@selector(ReplyButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
            btrCell.replyButton.tag = kBTRReplyButton + row;

            return btrCell;

これを修正する方法や、何が原因なのかよくわかりません。元のアプリは iOS3 用にビルドされ、iOS6 をサポートするためにマイナーな更新が行われたため、アプリをかなり書き直しています。このコードは、以前のバージョンからこのバージョンにコピーされましたが、iOS7 より前のバージョンではほとんど問題なく動作していました。TextView を表示するために TableView を完全にスクロールしていない iOS7 の新しい動作の一部なのか、それともセットアップで間違ったことをしたのかはわかりません。

4

1 に答える 1

0

1) .h ファイルで、 @interface MyViewController () <UITextViewDelegate>

2)yourTextView.delegate = self;

3)このデリゲートメソッドを使用して、テーブルビューを上にスクロールします

-(void) textViewDidBeginEditing:(UITextView *)textView
{

    if ([textView isEqual:yourTextView]) 
    {

        [tableview_WardList scrollToRowAtIndexPath:indexPathOfCellContainigTextview atScrollPosition:UITableViewScrollPositionTop animated:YES];

    }

}

テキストビューの編集が開始されるたびに、テーブルが上にスクロールされます。テキストビューを含むセルのインデックスパスを必ず渡してください。

于 2014-01-28T06:11:16.833 に答える