我目前在UITableViewController NIB中有一个NSArray加载值。我意识到我想在我的视图中使用一个表和其他对象,例如标签和按钮等。因此我需要在我的UIView中使用UITableView对象。
对此进行编码的正确方法是什么?我可以将方法从当前的TabeViewController类复制到我的UIView类吗?
#import "LogTableViewController.h"
@implementation LogTableViewController
@synthesize logArray;
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
logArray = [[NSArray alloc]initWithObjects:@"Today's Workout", @"Last Workout", @"Past Week", @"Past Month", @"All Workouts", nil];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
#warning Potentially incomplete method implementation.
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
#warning Incomplete method implementation.
// Return the number of rows in the section.
return [logArray count];
}
- (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 = [logArray objectAtIndex:indexPath.row];
return cell;
}
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here. Create and push another view controller.
/*
<#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
// ...
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
*/
}
@end
答案 0 :(得分:4)
<强> STEP-1 强>
在.h(标题文件)中,更改
@interface <viewControllername>:UITableViewController
到
@interface <viewControllername>:UIViewController
<强> STEP-2:强>
在您的XIB中,删除tableView
作为主视图,并从库中添加UIView。将文件所有者的view
插座连接到该UIView。
现在您可以将ViewController用作普通的UIViewController类。
立即向View添加tableView并给出其尺寸。
此外,您现在需要将一个插座添加到tableView,因为它不再是UITableViewController而是UIViewController。也不要忘记将表格的datasource
和delegate
连接与文件所有者
现在,您可以轻松地将其他控件放在tableView旁边。
希望这会对你有所帮助。
答案 1 :(得分:2)
如果我理解你的问题,听起来你现在有一个UITableViewController子类,你想把它改成UIViewController子类。
为了做到这一点,你需要做一些事情,希望我不会忘记任何步骤。
首先在@interface文件中,更改类的超类,符合数据源并委托协议,最后声明UITableView的出口:
@interface YourViewControllerName : UIViewController <UITableViewDataSource, UITableViewDelegate>
{
}
@property (nonatomic, retain) IBOutlet UITableView *myTableView;
转到你的实现文件并@synthesize tableView属性:
@implementaion YourViewControllerName
@synthesize myTableView;
如果您以编程方式创建视图控制器并在初始化期间进行任何自定义,则还需要更改指定的初始化程序(对于您而言,似乎并非如此,因为您提到了NIB文件,但在此处它是反正):
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
从旧视图控制器复制表视图委托和数据源方法,以及(NSArray *)数据源的任何自定义初始化代码。这通常是在viewDidLoad:
方法中创建的。
转到NIB文件(仅包含tableview对象的文件)。将UIView对象添加到nib并将表视图对象作为其子视图移动。
通过从文件所有者拖动到相应的对象,将UIView连接到文件所有者的视图插座,将UITableView连接到文件所有者的myTableView插座。使文件所有者成为tableview数据源并委托,但控制从tableview拖动到文件所有者。
除非我忘了什么,否则应该就是你需要做的一切。
随意在评论部分提出任何问题。
干杯,
罗格
答案 2 :(得分:1)
Parth上面的答案很棒 - 但我必须在我的代码中再做一件事。
当您从UITableViewController
更改为UIViewController
时,您失去的一件事就是财产clearsSelectionOnViewWillAppear
。所以我添加了viewDidAppear
的实现,如下所示:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSArray *selectedRows = [self.tableView indexPathsForSelectedRows];
if (selectedRows) {
for (NSIndexPath *selectedPath in selectedRows) {
[self.tableView deselectRowAtIndexPath:selectedPath animated:NO];
}
}
}