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

0

好的,所以我可以开始工作的唯一解决方案是创建一个自定义 UITableViewCell,它实现了 UITableViewDataSource、UITableViewDelegate 委托。

在 UITableViewCell 内有效地创建一个表。

类似于以下内容:

@interface MyTableWrappingCell()  <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, weak) UITableView *myTableView;
@end

@implementation MyTableWrappingCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
        UITableView *myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
        myTableView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin;
        myTableView.dataSource = self;
        myTableView.delegate = self;
        [self.contentView addSubview:myTableView];
        self.myTableView = myTableView;
    }
    return self;
}


- (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:@"internal Row %d", indexPath.row];
    return cell;
}

- (void) forceLoad{
    [self.myTableView reloadData];
}

@end

可访问性然后能够读取内容。

于 2013-11-06T10:24:08.710 回答