在UIViewController中设置UITableView

时间:2014-06-19 19:49:39

标签: objective-c uitableview uiviewcontroller delegates

我有一个名为QuickLookView的ViewController,我需要在其中实现一个表视图。我在头文件中声明了tableview:

@interface QuickLookView : UIViewController <UITableViewDelegate, UITableViewDataSource>
...
@property (weak, nonatomic) IBOutlet UITableView *medTableView;
@end

QuicklookView.m我合成了medTableView并添加了标准UITableView方法:

#pragma mark - Table view data source

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSMutableArray * timeline =  [gCore getDosageContainer];

    return [timeline count];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*         )indexPath
{
static NSString *CellIdentifier = @"medicineCell";
UITableViewCell *cell = [medTableView dequeueReusableCellWithIdentifier:CellIdentifier      forIndexPath:indexPath];

NSMutableArray * timeline =  [gCore getDosageContainer];

GuardianPatientDosageTimeline * d;

d = (GuardianPatientDosageTimeline *) [timeline objectAtIndex: indexPath.row];
NSString *MedTimeLine = [NSString stringWithFormat:@"%.02f %@ of %@",d->amount,d->units,d-  >name];

if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault   reuseIdentifier:CellIdentifier];
}


cell.textLabel.font = [UIFont fontWithName:@"ProximaNova-Regular" size:15];
cell.textLabel.text = MedTimeLine;//"toDoItem.itemName;



return cell;


}

这是我的委托和数据源的连接方式:

插座

datasource -------------------&gt; QuickLook View

委托---------------------&gt; QuickLook View

引用Outlets

medTableView ----------------&gt; QuickLook View

(我会张贴一张照片,但我的声誉不够大......)

但是在尝试了很多事情后我仍然遇到错误。从用正常整数替换我的return [timeline count];到将知道什么的东西链接起来。 “timeline”和“gCore”中的所有数据都在此文件之外使用,所以我知道那里有数据。

这是错误:

***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [UIView tableView:numberOfRowsInSection:]:

3 个答案:

答案 0 :(得分:0)

在表格视图的“属性”检查器中,它看起来像这样:

enter image description here

答案 1 :(得分:0)

尝试从界面构建器中删除委托和数据源出口,并以编程方式设置

 -(void)viewDidLoad
{
    //..
    self.tableView.delegate   = self;
    self.tableView.dataSource = self;
}

似乎您将这些插座连接到视图而不是视图控制器。

答案 2 :(得分:0)

原来我在布局的匆忙中意外地将两个UITableView放在彼此的顶部。这解释了为什么numberOfRowsInSection没有被调用 - 因为它指的是隐藏在我的主要版本之下的辅助UITableView。上面的所有其他方法都可用于将UITableView连接到UIViewController,我的问题特别是用户错误。