私はiPhoneプログラミングが初めてです。あまりにも多くのクラス ファイルを作成せずに複数の tableviewcontroller を作成するにはどうすればよいですか。
新しいフォルダーが作成されるたびにiphone safariのブックマークバーのように、ファイルを作成してプッシュします。テーブルビューを作成し続けます。
これを達成する方法。
質問する
187 次
1 に答える
1
一般的な UITableViewController を表す単一のクラスを作成/コーディングしてから、その複数のインスタンスを作成できます。たとえば、元の UITableViewController サブクラスがロードされて最初のページが表示され、行がタップされると、 didSelectRowAtIndexPath メソッドで UITableViewController サブクラスの別のインスタンスをインスタンス化し、それをナビゲーション スタックにプッシュします。
ここでオブジェクト指向プログラミングの手法を思い出してください。クラスはオブジェクトではなく、オブジェクトはクラスのインスタンスであり、クラスのインスタンスは多数存在する可能性があります。これは、ここで達成する必要があることです。
サンプルコードは次のとおりです。
MyTableViewController.h
#import <UIKit/UIKit.h>
@interface MyTableViewController : UITableViewController
@end
MyTableViewController.m
#import "MyTableViewController.h"
@implementation MyTableViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.title = NSLocalizedString(@"Master", @"Master");
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
self.clearsSelectionOnViewWillAppear = NO;
self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0);
}
}
return self;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//HERES THE IMPORTANT PART FOR YOU
//SEE HOW I'M JUST CREATING ANOTHER INSTANCE OF MasterViewController?
//You can tap the rows in this table until memory runs out, but all I have is one table view controller
MyTableViewController *newController = [[[MasterViewController alloc] initWithNibName:@"MyTableViewController" bundle:nil] autorelease];
[self.navigationController pushViewController:newController animated:YES];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 5;
}
- (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];
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
}
cell.textLabel.text = NSLocalizedString(@"Click Me", @"Click Me");
return cell;
}
@end
于 2012-05-09T19:27:09.060 に答える