簡體   English   中英

viewController中的UiTableView-未調用委托和dataSource方法

[英]UiTableView in viewController - delegate and dataSource methods not getting called

我剛剛完成了有關創建UIPageViewController的教程 本文末尾的鏈接中也提供了該教程的源代碼。 現在,我想代替imageView來為每個頁面添加一個帶有自定義單元格的tableView。 在PageContentViewController.h文件中,我為tableView添加了IBOutlet,稱為“ theTableView”。

現在,對於viewController,我執行了以下操作:

視圖控制器

#import <UIKit/UIKit.h>
#import "PageContentViewController.h"

@interface ViewController : UIViewController <UIPageViewControllerDataSource,UITableViewDataSource,UITableViewDelegate>
...
@property (strong, nonatomic) UIPageViewController *pageViewController;
@property (strong, nonatomic) NSArray *pageTitles;
@property (strong, nonatomic) NSArray *tableViews;


@end

viewController.m

- (void)viewDidLoad
{
    //some code
    UITableView* v1=[[UITableView alloc] init];
    v1.dataSource=self;
    v1.delegate=self;

    UITableView* v2=[[UITableView alloc] init];
    v2.dataSource=self;
    v2.delegate=self;

    _tableViews= @[v1, v2];

    PageContentViewController *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageContentViewController"];


 // Create page view controller
    self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
    self.pageViewController.dataSource = self;

    pageContentViewController.theTableView=self.tableViews[0];
    pageContentViewController.thetableView.frame=CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);

    PageContentViewController *startingViewController = [self viewControllerAtIndex:0];
    NSArray *viewControllers = @[startingViewController];
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

    // Change the size of page view controller
    self.pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);

    [self addChildViewController:_pageViewController];
    [self.view addSubview:_pageViewController.view];
    [self.pageViewController didMoveToParentViewController:self];

 // some code
}

- (PageContentViewController *)viewControllerAtIndex:(NSUInteger)index
{
    //some code

    // Create a new view controller and pass suitable data.
    PageContentViewController *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageContentViewController"];
    pageContentViewController.theTableView = self.tableViews[index];

    return pageContentViewController;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustumCell *cell= (CustumCell *)[tableView dequeueReusableCellWithIdentifier:@"customCell" forIndexPath:indexPath];

    if (cell==nil) {cell = [[CustumCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"customCell"];}

    return cell;
}


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

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

最后三個方法沒有被調用。 我在這里做錯了什么?

謝謝!

編輯 :在下面的答案中添加了建議。 仍然得到相同的結果。 當我添加SnowMax的解決方案(例如[self.view addSubview v1])時,將調用這些方法,但tableContent不會顯示在pageContentViewController中,因為我已在viewController中添加了子視圖。 嘗試將子視圖v1和v2添加到pageContentViewController.view中導致無法再次調用委托方法?

EDIT2我最終將tableView出口放置在pageContentViewController.h文件中,並在那里設置了dataSource和tableView的委托。 現在效果很好。 仍然不知道如何在viewController中設置tableView並正確地將表格顯示為pageContentViewController中的頁面,但是此解決方案現在仍會執行。 我剛剛開始學習ObjectiveC / cocoa,所以稍后我會解決。

問題是沒有將TableViews添加到您的視圖中。 您只需初始化視圖。

在本教程中,使用故事板來放置UI元素。 您可以通過這種方式將UITableView添加到情節提要中,並創建委托,並在viewDidLoad方法中設置委托和數據源。

ViewController.h

@interface ViewController : UIViewController <UIPageViewControllerDataSource,UITableViewDataSource,UITableViewDelegate>

@property (weak, nonatomic) IBOutlet UITableView *tableView;

@end

ViewController.m

- (void)viewDidLoad {
    // Set Delegate and Datasource
    self.tableView.dataSource=self;
    self.tableView.delegate=self;
}

如果要在代碼中創建TableView,則應將其添加到視圖中。

ViewController.m

- (void)viewDidLoad {
    // Init
    UITableView* v1=[[UITableView alloc] init];
    v1.dataSource=self;
    v1.delegate=self;

    // Place at your view
    [self.view addSubview:v1];
}

您必須將tableviewpageViewController添加到viewController並設置其委托。 在您的代碼中,您沒有設置pageViewController

viewDidLoad ,添加以下內容:

self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];

self.pageController.dataSource = self;
[[self.pageController view] setFrame:[[self view] bounds]];

PageContentViewController *initialViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageContentViewController"];
pageContentViewController.theTableView = self.tableViews[0];

NSArray *viewControllers = [NSArray arrayWithObject:initialViewController];

[self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

[self addChildViewController:self.pageController];
[[self view] addSubview:[self.pageController view]];
[self.pageController didMoveToParentViewController:self];

請參閱此處以獲取完整的教程

似乎您所做的一切都正確,但是您沒有設置表格視圖的frame 設置表格視圖的框架。

如果您未設置tableview的框架,則只有被調用的方法是。

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

希望對你有效 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM