0

既存のテーブルのフッターに UITableView を埋め込むことで、既存の UITableViewController を再利用しようとしています。

前提として、行を選択すると、フッターにさらに関連するオプションのリストが表示されます。これは正常に機能しますが、アクセシビリティ インスペクターは、フッターに埋め込まれたテーブルの行を読み取ることができません。

問題を示すコードの簡単なサンプルを作成しました。

メイン UITableViewController のコード

@interface MyUITableViewController ()

@end

@implementation MyUITableViewController{
    MySubUITableViewController *dataSourceClass;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    dataSourceClass = [[MySubUITableViewController alloc] init];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
    if(section == 0){
        CGRect tableFrame = CGRectMake(0, 0, self.view.frame.size.width, 200);

        UITableView *view = [[UITableView alloc]initWithFrame:tableFrame style:UITableViewStylePlain];

        view.rowHeight = 30;
        view.scrollEnabled = YES;
        view.showsVerticalScrollIndicator = YES;
        view.userInteractionEnabled = YES;
        view.bounces = YES;

        view.delegate = dataSourceClass;
        view.dataSource = dataSourceClass;
        return view;
    }
    return nil;
}


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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 5;
}

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    if(section == 0)
        return 200;
    return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"identifier";
    UITableViewCell *cell;

    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }

    cell.textLabel.text = [NSString stringWithFormat:@"Section %d Row %d", indexPath.section, indexPath.row];
    return cell;
}

フッター内に埋め込む表のコード

@implementation MySubUITableViewController {

}

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  return 20;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSString *CellIdentifier = @"subCell";
  UITableViewCell *cell;

  if (cell == nil) {
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
  }

  cell.textLabel.text = [NSString stringWithFormat:@"Footer Row %d", indexPath.row];
  return cell;
}
@end

アクセシビリティによって読み取られないフッター行を回避する方法を知っている人はいますか?

私は試した

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
  UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil);
}

しかし、役に立つ。

ありがとう

4

1 に答える 1