如何在没有NavigationController的情况下使用ASTableNode在ASViewController上添加类似Navigationbar的headerView?

时间:2017-04-17 07:59:47

标签: ios objective-c asyncdisplaykit

在我的应用程序中,我一般不使用NavigationController。 在UITableView中我会这样做,会添加

[Self.view addSubview: self.myCustomHeaderView];

但我正在使用ASTableNode。如果我做了一些类似的事情:

    - (instancetype)init {
      _tableNode = [[ASTableNode alloc] init];
      self = [super initWithNode:_tableNode];

      if (self) {

        _tableNode.dataSource = self;
        _tableNode.delegate = self;

      self.navigationItem = //navigationItem implement
      UINavigationBar *navbar = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
      navbar.backgroundColor = [UIColor redColor];

      navbar.items = @[self.navigationItem];

      ASDisplayNode *navBarNode = [[ASDisplayNode alloc] initWithViewBlock:^UIView * _Nonnull {
        return navbar;
    }];
      [self.node addSubnode:navBarNode];
      }

      return self;
    }

然后这个节点作为列表的一部分添加,并与列表一起滚动,我需要它作为固定标题。

2 个答案:

答案 0 :(得分:0)

使用ASDisplayNode而不是ASTableNode初始化,然后在VC的节点上添加表节点,例如:

@interface OCTextureTableController : ASViewController<ASDisplayNode *>

@property (nonatomic, strong) ASTableNode *tableNode;

- (instancetype)init
{
    self = [super initWithNode:[ASDisplayNode new]];
    if (self) {
        self.tableNode = [[ASTableNode alloc] init];
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    self.tableNode.backgroundColor = [UIColor yellowColor];
    self.tableNode.frame = CGRectMake(0, NAVIGATION_BAR_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT-NAVIGATION_BAR_HEIGHT);
    [self.node addSubnode:self.tableNode];
}

答案 1 :(得分:-2)

(i)将A类作为基类。 (ii)将B类作为具有A类的派生类。

现在在A类中添加一个uiview。这将被视为导航。(在该视图中做任何事情)

要使用相同的导航栏:您必须将其他所有类视为具有A类的类型。

是的。