我有一个包含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永远不会被调用。
答案 0 :(得分:16)
你能写一下你在cellForRowAtIndexPath:方法上写的代码吗?因为我发现你的代码没有任何问题。
你是否从其他ViewController调用你的UIView?如果是,怎么样?
我做过这样的事情一次。我在UIView中声明了一个方法:
- (void)setUpTableView{
self.tableview.delegate=self;
self.tableview.dataSource=self;
}
然后我从视图控制器调用setUpTableView我添加了这个视图,如下所示:
[self.yourView setUpTableView];
这可能会有所帮助。感谢。
答案 1 :(得分:14)
我有类似的问题,我的解决方案是因为我没有将部分数量设置为1。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
答案 2 :(得分:3)
你应该像这样声明你的观点
@interface MyView : UIView <UITableViewDelegate, UITableViewDataSource>
BTW:我会有一个“控制”你的视图和你的tableview的ViewController,并让ViewController成为表视图的委托和数据源。
答案 3 :(得分:3)
您不需要使用UIViewController,这只是一个烟幕。你也不需要添加到.h,尽管你应该这样做,因为Xcode会抱怨,否则你不会自动完成方法名称。
我刚刚写了一个测试项目,在普通的UIView中嵌入了一个表视图,它运行正常。只需确保调用您的初始化代码。我打赌你需要把它移到awakeFromNib。
答案 4 :(得分:1)
我曾经遇到过同样的问题,我在initWithCoder里面犯了什么愚蠢的错误我叫[super init]。 TableView在xib中
-(id) initWithCoder:(NSCoder *)aDecoder
{
self = [super init]
}
而不是
-(id) initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
}
检查是否不是这种情况
答案 5 :(得分:1)
试试这个:
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
我也有这个愚蠢的问题
答案 6 :(得分:0)
尝试将UIView
更改为UIViewController
,然后在viewDidLoad
中将
[[UITableView alloc] initWithFrame:style:]
创建表视图。
将self设置为与上面一样的委托和数据源,然后在此Controller中将此UITableView添加为Subview。
答案 7 :(得分:0)
我不小心将tableView
的{{1}}属性设置为allowsSelection
。
故事板解决方案
快速解决方案
false
注释
override func viewDidLoad() {
super.viewDidLoad()
tableView.allowsSelection = true
}
问题(如其他答案所建议)。不是。我将其链接到情节提要中的视图控制器。 UITableViewDelegate
问题,因为我没有实现协议的UITableViewDataSource
方法(如其他答案所建议)。不是。根据UIKit的文档,//如果未实现,则默认为1