2

Xcode 5 にアップグレードし、アプリを iOS 7 をターゲットにするようにアップグレードしましたが、アプリが scrollToIndexPath に応答しなくなり、適切な tableviewcell をキーボードの邪魔にならないようにスクロールしました

私のセットアップは、テキストフィールドを備えたカスタムテーブルビューセルがあり、それを使用して複数のテーブルビューセルを生成し、住所の一部を表示および編集していました。

セルトリガーのテキストフィールドをタップ

- (void)textFieldDidBeginEditing:(UITextField *)textField

そして、キーボードの邪魔にならないように上にスクロールさせるコードは次のとおりです

UITableViewCell *cell = (UITableViewCell*) textField.superview.superview;
[self scrollToRowAtIndexPath:[self indexPathForCell:cell] atScrollPosition:UITableViewScrollPositionTop animated:YES];

これは iOS 6 では正常に機能しましたが、iOS 7 では機能しません。エラーも発生しません。

4

2 に答える 2

5

ここでの解決策は簡単です

tableviewCells の階層に変更があったようです

したがって、余分な .superview を追加します

UITableViewCell *cell = (UITableViewCell*) textField.superview.superview;

なる

UITableViewCell *cell = (UITableViewCell*) textField.superview.superview.superview;

iOS 7 を対象に動作します。

textField.superview.superview は、クラス UITableViewCell (より具体的には私のカスタム UITableViewCell) のオブジェクトでした。

これはクラス UITableViewCellScrollView のオブジェクトであり、そのスーパービューを取得する必要があります。

UITableViewCellScrollView は、左にスライドして削除ボタンを表示できるようにするプライベート サブクラスです。

これを解決した後、私はそれをうまく説明しているこのブログ投稿を見つけました

これがあなたの何人かがあなたの髪を引っ張るのを止めることを願っています:)

サイモン

于 2013-10-02T10:02:15.627 に答える
2

前の回答が言ったように、UITableViewCell のビュー階層は iOS 7 で変更されました。使用する代わりに:

UITableViewCell *cell = (UITableViewCell*) textField.superview.superview;

次のメソッドを定義します。

- (UITableViewCell *)cellForSubview:(UIView *)subview
{
    UIView *view = subview;
    while (view != nil && ![view isKindOfClass:[UITableViewCell class]]) {
        view = [view superview];
    }
    return view;
}

次に、次のように使用します。

UITableViewCell *cell = [self cellForSubview:textField];

これは iOS 6 および 7 で動作するはずです。

于 2014-02-11T21:14:14.337 に答える