iOSの - (instancetype)initWithCoder:(NSCoder *)aDecoderピット小さなノート

我々はXIBは、一般的には手のコードを持ってサポートするために必要なコントロールをパッケージ化する際に一般的に我々は、次の2つの方法で私たちのカスタムアクションの実装をサポートします。そして、initWithCoder上のピットが来ました。

/// 手码 
- (instancetype)initWithFrame:(CGRect)フレーム{
    セルフ = [スーパーinitWithFrame:フレーム];
     IF (自己){
         //   カスタムアクション
        [自己initData]。
        【自己initUI]。
    }
    返す自己を。
}

/// XIB 
- (instancetype)initWithCoder:(NSCoder * )aDecoder {
   自己 = [スーパーinitWithCoder:aDecoder];
     IF (自己){
         //   カスタムアクション
        [自己initData]。
        【自己initUI]。
    }
    返す自己を。
}

私は、ビュー上のUITableViewを詰め

- (ボイド)initUI {
    self.backgroundColor = [UIColor clearColor]。
    [自己addSubview:self.appendixTableView]。
    [self.appendixTableViewのmas_remakeConstraints: ^(MASConstraintMaker * メイク){
        make.top.equalTo(self.mas_top)。
        make.left.equalTo(self.mas_left)。
        make.bottom.equalTo(self.mas_bottom)。
        make.right.equalTo(self.mas_right)。
    }]。
    
    [self.appendixTableView registerClass:[iComeAppendixTableViewCell クラス] forCellReuseIdentifier:iComeAppendixTableViewCellReused]。
    
}

- (のUITableView * )appendixTableView {
     場合(!_appendixTableView){
        _appendixTableView = [[のUITableViewのalloc] initWithFrame:CGRectZeroスタイル:UITableViewStyleGrouped];
        _appendixTableView。デリゲート = 自己;
        _appendixTableView.dataSource = 自己;
        _appendixTableView.backgroundColor = [UIColor clearColor]。
        _appendixTableView.separatorStyle = UITableViewCellSeparatorStyleNone。
        _appendixTableView.bounces = NO。
        _appendixTableView.showsHorizo​​ntalScrollIndicator = NO。
        _appendixTableView.showsVerticalScrollIndicator = NO。
        
        もし(@available(iOSの11.0、* )){
            _appendixTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever。
           
        } {
            self.viewController.automaticallyAdjustsScrollViewInsets = NO;
        }
        
    }
    返す_appendixTableViewを。
}

次いで、特定の属性は、背景色、分割線、等として提供テーブルビューは、動作しないことを見出しました。ここで問題を識別するための様々な方法をテストした後、

// パッケージは、問題の包装をすることのUITableView UICollectionView問題はない
 // - (instanceType)initWithCoder:(NSCoder *)aDecoder {
 //     自己= [スーパーinitWithCoder:aDecoder];
 //     IF(自己){
 //         [セルフinitData ];
 //         [セルフinitUI];
 //     }
 //     自己を返す;
 // }

// awakeFromNib方法における問題はない 
( - ボイド{awakeFromNib)
    [スーパーawakeFromNib]。
    【自己initData]。
    【自己initUI]。
}

要約すると:

それはawakeFromNibでカスタムアクションを追加するのがベストですので、梱包initWithCoder問題があるのUITableView

おすすめ

転載: www.cnblogs.com/lijianyi/p/11549875.html