UITableView作为子视图?

3
这是可能的吗?我只想在当前视图中放置一个小表格...这是我想做的事情:
.h文件
#import <UIKit/UIKit.h>


@interface IngredientsRootView : UIViewController <UITableViewDelegate, UITableViewDataSource> {
 UITableView *ingredientsTable;
}

@property (nonatomic, retain) UITableView *ingredientsTable;

@end

在我的.m文件中,我有代理和数据源方法以及以下代码:

ingredientsTable = [[UITableView alloc] initWithFrame:CGRectMake(10, 10, 300, 300) style:UITableViewStylePlain];
 [ingredientsTable setDelegate:self];
 [ingredientsTable setDataSource:self];
 [self.view addSubview:ingredientsTable];

该应用程序没有崩溃,但是它没有显示表格。目前,我已经按照以下方式明确设置了所有内容:
#pragma mark -
#pragma mark Table view data source

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


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return 10;
}


// the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

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

    // Configure the cell...
 cell.textLabel.text = @"Hello";

    return cell;
}

我做错了什么?谢谢。

我猜这取决于你在哪里初始化tableView,你是在控制器的initWithNib:方法中进行吗? - rano
哦,抱歉...没有viewDidLoad :) - Thomas Clayson
尝试在Interface Builder中将其链接为IBOutlet,并将初始化留给他,只需保留委托/数据源部分。 - rano
2个回答

3
尝试在将其添加为子视图后,在表视图上调用-reloadData
另外,视图是如何设置的?是通过XIB创建还是通过-loadView创建的?

没有XIB...我受不了它们哈。这个是在viewDidLoad中创建并添加的。我会尝试一下的。 :) - Thomas Clayson
1
我指的是将表视图添加为子视图的那个视图。那是如何创建的?你实现了-loadView吗?如果你没有使用XIB并且没有实现-loadView,或者在其他地方设置了视图控制器的视图,那么当你尝试将表视图添加为子视图时,self.view将返回nil,什么也不会发生。 - Jasarien
1
我不想听起来很唐突,但这并没有解释视图控制器的视图是在哪里创建的。据我所知,您有一个要推入堆栈的视图控制器,并且希望将表视图添加为视图控制器管理的视图的子视图?您的视图控制器需要创建一个视图。这可以通过实现loadView来完成,创建一个视图实例并将其分配给视图属性,通过从其他类设置视图属性或在界面构建器中创建视图并将其链接到视图输出口来完成。您做过这些吗? - Jasarien
如果你没有一个视图控制器,viewDidLoad 将不会被调用,因为没有视图正在被加载,因此你的表格视图不会作为子视图添加进来。 - Jasarien
1
你有点对(很抱歉回复晚了)...问题不是我没有创建视图,而是我从哪里构建所有内容 - 表视图确实被添加了,但是在前面的视图(一个图像视图)后面。将所有内容放入loadView中解决了问题。:) 谢谢 - Thomas Clayson
显示剩余2条评论

0

你记得在你的应用程序委托中添加 [window addSubview:[IngredientsRootView view]]; 吗?

顺便说一下,你可以继承自UITableViewController而不是UIViewController,这样你就可以获得所有功能,而无需添加任何代码。


UITableViewController 假定其 view 属性实际上是一个 UITableView,因此如果您的视图是其他类型(例如 UIView "容器"),则从中继承是不合适的类。 - Shaggy Frog
你说得对 - 不知为何我认为他的控制器视图是表视图。 无论如何,我的第一个建议仍然有效。 谢谢。 - Idan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接