我正在尝试创建几个小的静态表格视图并将它们添加到我拥有的滑入和滑出的面板中。该面板是以编程方式创建的,因此我无法通过情节提要在其中放置表格视图,无论如何我不确定这是否可能:似乎唯一可以布置有效的静态表格视图的方法是在表格视图控制器中,它占据了整个屏幕。
如果你不能说我对 iOS 开发很陌生,所以如果我不理解这里的一些基本概念,请随时解释。
我正在尝试创建几个小的静态表格视图并将它们添加到我拥有的滑入和滑出的面板中。该面板是以编程方式创建的,因此我无法通过情节提要在其中放置表格视图,无论如何我不确定这是否可能:似乎唯一可以布置有效的静态表格视图的方法是在表格视图控制器中,它占据了整个屏幕。
如果你不能说我对 iOS 开发很陌生,所以如果我不理解这里的一些基本概念,请随时解释。
当然是可能的。这是如何完成的:
TableViewController
拖到故事板中。Size
为Freeform
,添加标识符并取消选中Resize View From NIB
Static Cells
. 设计你的细胞。现在,无论您需要在哪里实例化它,都可以这样做:
// I am using a UITableViewController as an example here
// you probably would like to set your actual controller subclass instead
UITableViewController *tableViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"staticTv"];
UITableView *tableView = tableViewController.tableView;
[self.view addSubview:tableView]; // Or add it to whatever view
享受 :)
AUITableViewController
不是提供管理 a 所需的功能所必需的UITableView
。我认为您正在寻找的是“代表”模式。任何UIViewController
人都可以被指定为UITableView
. 例如,我有一个“静态”表,其中显示了我正在开发的应用程序中的一些选项:
@interface LBOptionsViewController : UIViewController <UITableViewDataSource,
UITableViewDelegate>
如果您以编程方式创建表视图,您可能会在其中创建它们,viewDidLoad
或者loadView
(如果您自己创建实际视图)。创建 tableView 后,分配代表:
self.tableView.delegate = self;
self.tableView.dataSource = self;
然后您的UIViewController
子类将收到数据委托消息,例如:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
不确定这是否对您有帮助。我还没有玩过 Storyboards。
编辑: @Alladinian 有正确的答案!如果您使用视图控制器的属性,请确保在需要其他方法调用它时分配它。
我还没有找到一个有用的理由来使用静态表格视图单元格而不是动态的。当我开始 iOS 编程时,表格视图非常可怕。我在我的第一个应用YIKES中使用了 sqlite 。
所以,是的,您应该只导入 UITableView 数据源和委托,然后通过将表格视图添加到您的面板来跟进(假设它是一个 uiview 并且您可以将表格视图添加为子视图)。
无论如何,您的 ViewController.h 中包括 UITableViewDataSource 和 UITableViewDelegate。
@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>
接下来,为 aUITableView
和 an添加属性NSMutableArray
:
@property (strong, nonatomic) UITableView* tableView;
@property (strong, nonatomic) NSMutableArray* tableViewContents;
在您的 ViewController 的 .m 中:
@synthesize tableView;
@synthesize tableViewContents;
里面ViewDidLoad
:
self.tableViewContents = [NSMutableArray arrayWithObjects:@"Cell 1",@"Cell 2",@"Cell 3",nil];
[self.tableView setDelegate:self]
[self.tableView setDatasource:self]
在 .m 文件中:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.tableViewContents.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSUInteger row = [indexPath row];
index = row;
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
}
cell.textLabel.text = [tableViewContents objectAtIndex:row];
return cell;
}