![](/img/trans.png)
[英]iPad application UITableView delegate methods are not getting called
[英]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。
我不小心將tableView
的allowsSelection
屬性設置為false
。
故事板解決方案
迅捷解決方案
override func viewDidLoad() {
super.viewDidLoad()
tableView.allowsSelection = true
}
筆記
UITableViewDelegate
問題(正如其他答案所示)。 事實並非如此。 我在故事板中將它鏈接到我的視圖控制器。 UITableViewDataSource
問題,因為我沒有實現協議的numberOfSections(in tableView:)
方法(如其他答案所示)。 事實並非如此。 根據UIKit的文檔, //如果未實現,則默認值為1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.