簡體   English   中英

UITableView委托和dataSource方法沒有被調用

[英]UITableView delegate and dataSource methods not getting called

我有一個包含UITableView的UIView。 tableview的委托設置為我的UIView,但它從不調用委托方法:

-(id)init {
    self = [super init];
    if (self) {
        self.tableView = [[UITableView alloc] initWithFrame:self.bounds];
        self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
        self.tableView.dataSource = self;
        self.tableView.delegate = self;
        self.tableView.scrollEnabled = NO;
        self.tableView.layer.cornerRadius = PanelCornerRadius;
        [self addSubview:self.tableView];
    }
    return self;
}

#pragma mark - UITableViewDelegate methods

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSLog(@"height for row");
    int height = [self heightForRowAtIndexPath:indexPath];

    return height;
}

#pragma mark - UITableViewDataSource methods

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    NSLog(@"number of rows");
    if (self.manager.fetchOperation.dataFetchProblem) {
        return 1;
    }

    int numberOfRows = [self.delegate numberOfSectionsInPanel:self];

    return numberOfRows;
}

我已經探索了我能想到的每一個選項,但似乎無法找到問題的根源。

編輯:包括numberOfRowsInSection。 它可能會返回0,只有它永遠不會有機會,因為“行數”NSLog永遠不會被調用。

你能寫一下你在cellForRowAtIndexPath:方法上寫的代碼嗎? 因為我發現你的代碼沒有任何問題。

你是從其他ViewController調用你的UIView嗎? 如果有,怎么樣?

我做過類似的事情一次。 我在UIView中聲明了一個方法,如下所示:

- (void)setUpTableView{
    self.tableview.delegate=self;
    self.tableview.dataSource=self;
}

然后我從視圖控制器調用setUpTableView我添加了這個視圖,如下所示:

[self.yourView setUpTableView]; 

這可能有所幫助。 謝謝。

我有類似的問題,我的解決方案是因為我沒有將部分數量設置為1。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

你應該聲明你的視圖@interface MyView : UIView <UITableViewDelegate, UITableViewDataSource>

順便說一句:我會有一個ViewController“控制”你的視圖和你的tableview,並讓ViewController成為表視圖的委托和數據源。

你不需要使用UIViewController,這只是一個煙幕。 你也不需要添加到.h,盡管你應該這樣做,因為Xcode會抱怨,否則你不會自動完成方法名稱。

我剛剛寫了一個測試項目,在普通的UIView中嵌入了一個表視圖,它運行正常。 只需確保調用您的初始化代碼。 我打賭你需要將它移動到awakeFromNib。

我曾經遇到過同樣的問題,我在initWithCoder中犯了什么愚蠢的錯誤我叫[super init]。 TableView在xib中

-(id) initWithCoder:(NSCoder *)aDecoder
{
    self = [super init]
}

代替

-(id) initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
}

只是檢查是否不是這種情況

試試這個:

override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

我也有這個愚蠢的問題

嘗試將UIView更改為UIViewController並在viewDidLoad中調用

[[UITableView alloc] initWithFrame:style:]創建表視圖。

像上面一樣將self設置為委托和數據源,然后在此Controller中將此UITableView添加為Subview。

我不小心將tableViewallowsSelection屬性設置為false

故事板解決方案

選擇表格視圖並設置以下內容...... 在此輸入圖像描述

迅捷解決方案

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.allowsSelection = true
}

筆記

  1. 起初,我認為這是一個UITableViewDelegate問題(正如其他答案所示)。 事實並非如此。 我在故事板中將它鏈接到我的視圖控制器。
  2. 接下來,我認為這是一個UITableViewDataSource問題,因為我沒有實現協議的numberOfSections(in tableView:)方法(如其他答案所示)。 事實並非如此。 根據UIKit的文檔,

//如果未實現,則默認值為1

  1. 最后,我檢查了表視圖上的設置:]

暫無
暫無

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

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