将UITableView添加到现有的ViewController

时间:2015-03-04 00:57:30

标签: ios objective-c uitableview addsubview tableviewcell

我尝试以编程方式向现有UITableView添加UIViewController

我的run.h文件包含:

@interface runTests : UIViewController <UINavigationControllerDelegate,UITextFieldDelegate,UIAlertViewDelegate,UITableViewDelegate,UITableViewDataSource> {NSTimer *Timer;}

@property (strong, nonatomic) UITableView *tableView;

我的应用程序通过速度测试,在测试结束时,我尝试将TableView添加到View中。目前我有这个:

-(void)addSpeedTable {


    self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
    self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;

    self.tableView.rowHeight = 45;
    self.tableView.sectionFooterHeight = 22;
    self.tableView.sectionHeaderHeight = 22;

    self.tableView.delegate = self;
    self.tableView.dataSource = self;

    [self.view addSubview:self.tableView];


}

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

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

    {
        return 1;
    }

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

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

        cell.textLabel.text = @"Testing";

        return cell;
    }

该应用从未进入cellForRowAtIndexPath方法,但确实将其纳入上述其他两个方法。我无法在Xcode输出中看到任何错误。

我需要在这里做的任何事情:

enter image description here

当应用程序失败时,我得到的是:

enter image description here

6 个答案:

答案 0 :(得分:6)

如果UITableView的宽度为零,则永远不会调用datasource

所以改变你的代码

self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
祝你好运!

答案 1 :(得分:2)

您应该使用框架(以及可选的样式)初始化UITableView,或者至少在某处定义框架。

例如:

UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 200, 200) style:UITableViewStylePlain];

答案 2 :(得分:1)

您需要将属性tableView分配给您在addSpeedTable方法中创建的实例,然后使用self.tableView引用它。

-(void)addSpeedTable {
    self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
    self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;

    self.tableView.rowHeight = 45;
    self.tableView.sectionFooterHeight = 22;
    self.tableView.sectionHeaderHeight = 22;

    self.tableView.delegate = self;
    self.tableView.dataSource = self;

    [self.view addSubview:self.tableView];
}

修改

正如其他答案所指出的那样,您可能还需要在UITableView上设置框架:

self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;

答案 3 :(得分:1)

使用init方法初始化视图,这意味着视图的框架是CGRectZero。 因此调用了numberOfRowsInSection,但SDK发现不需要显示单元格,因为框架是CGRectZero。

- (void)addSpeedTable {

.....

tableView.frame = self.view.bounds;
[self.view addSubview:tableView];

}

你应该通过self.tableView = tableView将tableView分配给属性,或者你的tableView属性永远不会是有效状态。

答案 4 :(得分:0)

您可以在thirdLine处添加断点,并打印出该帧,看其中一个边界是否为0.

答案 5 :(得分:0)

我认为您可能声明了错误的语法。我无法上传图片,请注意以下代码的不同之处。资本化可能是问题所在。     {         //服务条款         static NSString * cellId = @&#34; justCommon&#34 ;;

    static NSString *CellIdentifier = @"newCell";
}