3

このように UITableViewCellDeleteConfirmationControl を使用してもよろしいですか:

- (void)layoutSubviews {
    [super layoutSubviews];

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:0.0f];

    for (UIView *subview in self.subviews) {
        if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) { 
        CGRect newFrame = subview.frame;
        newFrame.origin.x = 200;
        subview.frame = newFrame;
        }
        else if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellEditControl"]) {             
            CGRect newFrame = subview.frame;
            newFrame.origin.x = 100;
            subview.frame = newFrame;
        }
        else if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellReorderControl"]) {             
        CGRect newFrame = subview.frame;
        newFrame.origin.x = 200;
        subview.frame = newFrame;
       }
   }
   [UIView commitAnimations];
}

UITableViewCellDeleteConfirmationControl はパブリック クラスではありませんが?

4

2 に答える 2

0

文字列の等価性を比較しているため、プライベート API を公開していないため、AppStore への提出の資格があるはずです。

AppStore に公開された自分のアプリで、この等価チェックを使用することに成功しました。

于 2013-10-19T12:47:41.823 に答える
0

まず、クラスは文字列ではありません。NSStringFromClass([subview class])クラス名の文字列表現を取得するために使用する必要があります。

第二に、クラス名全体を文字列リテラルとして持つことは大きなリスクであり、それほど明白であってはなりません。たとえば、探している名前の一部が名前に含まれているかどうかをテストできます[className rangeOfSubstring:@"DeleteConfirmation"].location != NSNotFound

第三に、これが公開されていない理由は、それがテーブルビュー セルのプライベートな実装であるためです。すべきではない理由の良い例は iOS7 にあります。セルの実装全体が完全に変更されています。例で言及したクラスは使用されなくなりました。

于 2013-10-19T13:12:37.107 に答える