UITableView 作为子视图?

Posted

技术标签:

【中文标题】UITableView 作为子视图?【英文标题】:UITableView as a subview? 【发布时间】:2010-08-24 11:27:44 【问题描述】:

这可能吗?我只想在我当前的视图中有一张小桌子......这就是我想要做的:

.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: 方法中做的吗? 哦抱歉....没有 viewDidLoad :) 尝试在 Interface Builder 中将其链接为 IBOutlet 并将初始化留给他,只保留委托/数据源部分 【参考方案1】:

将表视图添加为子视图后尝试在表视图上调用-reloadData

另外,视图是如何设置的?它是在 XIB 中创建的还是通过 -loadView 创建的?

【讨论】:

没有 XIB... 受不了哈。它在 viewDidLoad 中创建并添加到那里。我会试试的。 :) 我的意思是表视图作为子视图添加到的视图。那是如何创建的?你实现-loadView了吗?如果您没有使用 XIB 并且您没有实现 -loadView,或者在其他地方设置视图控制器的视图,那么当您尝试将表视图添加为子视图时,self.view 将返回 nil,并且不会发生任何事情。 另外,请记住 viewDidLoad 仅在 loadView 之后调用,或者如果视图在其他地方设置或在 IB 中创建。在viewDidLoad 中设置断点以验证它是否正在被调用。 我讨厌听起来咄咄逼人,但这并不能解释视图控制器的视图是在哪里创建的。据我了解,您有一个要推送到堆栈上的视图控制器,并且您希望添加一个表视图作为视图控制器管理的视图的子视图?您的视图控制器需要创建一个视图。这可以通过实现 loadView、创建视图实例并将其分配给视图属性、通过从其他类设置视图属性或通过在界面构建器中创建视图并将其链接到视图出口来完成。这些你都做过吗? 你说的有点对(抱歉回来晚了)......问题不在于我没有创建视图,而是我从那里构建所有内容 - 表格视图正在获取添加,但在前面的视图后面(图像视图)。将所有内容放入 loadView 有帮助。 :) 谢谢【参考方案2】:

您是否记得将[window addSubview:[IngredientsRootView view]]; 添加到您的应用委托?

顺便说一句,您可以直接从 UITableViewController 继承,而不是从 UIViewController 继承,并且无需添加代码即可为您获得所有功能。

【讨论】:

UITableViewController 假定其 view 属性实际上是 UITableView,如果您的视图是其他东西(例如 UIView "container" ) 你说得对——出于某种原因,我认为他的控制器视图是表格视图。无论如何,我的第一个建议仍然有效。谢谢

以上是关于UITableView 作为子视图?的主要内容,如果未能解决你的问题,请参考以下文章

将 UITable 中 UITableViewCell 中子视图中对象的 CGRect 转换为相对于 self.view 的 CGRect

如何以编程方式在 UITableView 中添加视图?

UITableView 静态单元格作为子视图?

uiview 作为包含 uitableview 的子视图

UITableView 作为子视图?

UICollectionView 作为 UITableView 子视图流布局循环