2016-12-05 6 views
0

私はカスタムセルを持つマスターUITableViewを持っています。このマスター表ビュー内のセルの高さは、自動レイアウト制約を使用して動的に計算されます。マスターテーブルビューのセル内にスレーブのUITableViewを追加します。これを達成するための説明を提供してください。 (サンプルプロジェクトも非常に役に立ちます)。動的高さを持つ別のUITableView(Master)のカスタムセル内でサブビューとして追加されるUITableView(スレーブ)の動的高さを達成

答えて

0

解決策が見つかりました。

#import "TableViewController.h" 
#import "CustomCellTableViewCell.h" 

@interface TableViewController() 
    { 
    NSMutableArray *array; 
    NSString *cellID; 
    } 
@end 


@implementation TableViewController 

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 
    array = [[NSMutableArray alloc]initWithObjects:@"Hi",@"13.861970 dsdlkdksjdksksdjkljkdlsjkldsjk dsdlkdksjdksksdjkljkdlsjkldsjkdsdlkdksjdksksdjkljkdlsjkldsjkdsdlkdksjdksksdjkljkdlsjkldsjk", @"Latitude",@"100.504250", @"Longitude",@"50 kph", @"Speed",@"1000 meters", @"Altitude",@"12/04/2010", @"Date",@"05:45 PM", @"Time",@"North west", @"Course", nil]; 
    cellID = @"cellID"; 

    [self.tableView setRowHeight:UITableViewAutomaticDimension]; 
    [self.tableView setEstimatedRowHeight:50]; 
    [self.tableView registerClass:[CustomCellTableViewCell class] forCellReuseIdentifier:cellID]; 

} 


    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    #warning Incomplete implementation, return the number of sections 
    return 1; 
    } 

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:  (NSInteger)section { 
    #warning Incomplete implementation, return the number of rows 
    return [array count]; 
    } 


    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    CustomCellTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath]; 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 

    if (indexPath.row == 1) 
    { 
     [cell addTableWithText:[array objectAtIndex:indexPath.row]]; 
    } 
    else 
    { 
     [cell setCellText:[array objectAtIndex:indexPath.row]]; 
    } 
return cell; 
} 

CustomCellTableViewCellは次のように実装されています。

#import <UIKit/UIKit.h> 

    @interface CustomCellTableViewCell : UITableViewCell<UITableViewDelegate,UITableViewDataSource> 
{ 
    UILabel *cellLabel; 
    UITableView *table; 
    NSMutableArray *tableData; 
} 
-(void) setCellText:(NSString *) text; 
-(void) addTableWithText:(NSString *) text; 
    @end 



#import "CustomCellTableViewCell.h" 
#import "Masonry.h" 

@implementation CustomCellTableViewCell 


-(void) setCellText:(NSString *) text 
{ 
    if (cellLabel == nil) 
    { 
     cellLabel = [[UILabel alloc]init]; 
     [cellLabel setNumberOfLines:0]; 
     [cellLabel setBackgroundColor:[UIColor redColor]]; 
     [self addSubview:cellLabel]; 

     [cellLabel mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.edges.equalTo(self).with.insets(UIEdgeInsetsMake(10, 10, 10,10)); 
     }]; 
    } 
    [cellLabel setText:text]; 
    } 



-(void) addTableWithText:(NSString *) text 
{ 
    tableData = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9", nil]; 

if (table == nil) 
{ 
    table = [[UITableView alloc]init]; 
    [table setDelegate:self]; 
    [table setDataSource:self]; 
    [table setScrollEnabled:NO]; 
    [table setEstimatedRowHeight:40]; 
    [table setRowHeight:UITableViewAutomaticDimension]; 
    [self addSubview:table]; 

    [table registerClass:[CustomCellTableViewCell class] forCellReuseIdentifier:@"cell"]; 

    [table mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.top.greaterThanOrEqualTo(self); 
     make.left.equalTo(self).with.offset(10); 
     make.right.equalTo(self).with.offset(-10); 
     make.bottom.equalTo(self).with.offset(-10); 
    }]; 
} 
if (cellLabel == nil) 
{ 
    cellLabel = [[UILabel alloc]init]; 
    [cellLabel setNumberOfLines:0]; 
    [cellLabel setBackgroundColor:[UIColor redColor]]; 
    [self addSubview:cellLabel]; 

    [cellLabel mas_makeConstraints:^(MASConstraintMaker *make) { 

     make.top.equalTo(self).with.offset(10); 
     make.left.equalTo(self).with.offset(10); 
     make.right.equalTo(self).with.offset(-10); 
     make.bottom.equalTo(table.mas_top).with.offset(-10); 
    }]; 
} 
else 
{ 
    [cellLabel mas_remakeConstraints:^(MASConstraintMaker *make) { 
     make.top.equalTo(self).with.offset(10); 
     make.left.equalTo(self).with.offset(10); 
     make.right.equalTo(self).with.offset(-10); 
     make.bottom.equalTo(table.mas_top).with.offset(-10); 
    }]; 
} 

[cellLabel setText:text]; 
[table layoutIfNeeded]; 
CGFloat height = table.contentSize.height; 

[table mas_remakeConstraints:^(MASConstraintMaker *make) { 
    make.top.greaterThanOrEqualTo(self); 
    make.left.equalTo(self).with.offset(10); 
    make.right.equalTo(self).with.offset(-10); 
    make.bottom.equalTo(self).with.offset(-10); 
    make.height.equalTo([NSNumber numberWithFloat:height]); 
}]; 
} 


-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    { 
    return 1; 
    } 


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    { 
    return [tableData count]; 
    } 


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomCellTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    [cell setCellText:[tableData objectAtIndex:indexPath.row]]; 
    return cell; 
} 
@end 
関連する問題