設定パネルとして機能するスライドアウト UIView があります。ビューには、その中にテーブル ビュー コントローラーを含むコンテナーがあります。テーブル ビュー自体には、さまざまなオプションを表す静的セルの約 6 つのグループがあります。各セルにはいくつかの UIButton があり、グループによって動作が異なります。各グループのボタンの描画を処理する別のカスタム UIView サブクラスを作成しました。このパネルが最初にロードされると、各グループのボタンの辞書の辞書と、各グループのカスタム ビューの辞書の辞書 (キー パスが一致するもの) を作成します。
問題は、カスタム ビューがパネルの上部にしか並んでいないように見えることです。パネルの一番下までスクロールすると、ボタン ビューが並んでいません。私の人生では、これを理解することはできないようです。パネルの写真は次のとおりです。
パネルがロードされたときに設定を初期化してカスタムサブビューをレイアウトするために使用しているコードは次のとおりです(設定パネルのテーブルビューコントローラークラスで):
- (void)initializeSettings
{
self.buttonStates = nil; // A dictionary of dictionaries with all button states within the panel
self.buttonViews = nil; // A dictionary of dictionaries with all button views (same keyPaths as self.buttonStates).
NSMutableDictionary *buttonStates = [[NSMutableDictionary alloc] init];
NSMutableDictionary *buttonViews = [[NSMutableDictionary alloc] init];
NSArray *btnGroupNames = [self btnGroupNames]; // Array of button group names.
NSArray *btnArrays = [self btnArrays]; // An array of arrays with all buttons.
for(int i = 0; i < [btnArrays count]; i++){
NSArray *outerArray = [btnArrays objectAtIndex: i];
NSString *outerKey = [btnGroupNames objectAtIndex: i];
NSMutableDictionary *innerDicV = [[NSMutableDictionary alloc] init];
NSMutableDictionary *innerDicS = [[NSMutableDictionary alloc] init];
for(UIButton *btn in outerArray){
NSString *innerKey = [btn.titleLabel.text stringByReplacingOccurrencesOfString:@" " withString:@""];
ButtonSelectionView *bsv = [[ButtonSelectionView alloc] initWithFrame: btn.frame];
bsv.alpha = 0.0;
bsv.opaque = NO;
[[btn superview] addSubview: bsv];
[[btn superview] bringSubviewToFront: btn];
[innerDicV addEntriesFromDictionary: @{ innerKey : bsv }];
[innerDicS addEntriesFromDictionary: @{ innerKey : NOT_SELECTED }];
}
[buttonViews setValue: innerDicV forKey: outerKey];
[buttonStates setValue: innerDicS forKey: outerKey];
}
self.buttonViews = buttonViews;
self.buttonStates = buttonStates;
self.previousButtonStates = nil;
self.settingsLoaded = YES;
}
補足: 辞書は遅延インスタンス化されます。また、viewDidLoad、viewDidAppear、およびviewDidLayoutSubviewsからこの関数を呼び出してみましたが、役に立ちませんでした。どんな提案でも大歓迎です、ありがとう!