2012-01-04 62 views
2

我一直在努力理解故事板和Objective-C編碼之間的區別。看起來你可以創建一個UITableView,既可以將對象拖到Storyboard中,也可以在Objective-C中的新視圖中進行編碼。如何以編程方式創建UITableView並在Xcode 4.2中填充NSArray?

問題是我想保持我的故事板儘可能苗條。所以我試圖用5個字符串的NSArray來構建和填充UITableView。我的代碼只會在返回編譯器錯誤之前運行1行...我將廢棄整個項目並重新開始。

如果熟悉新的Xcode 4.2/iOS5/Storyboards的人可以爲構建UITableView提供合理的解決方案,我將不勝感激。我知道這是一個基本的任務,這就是爲什麼一開始就很沮喪。我可以得到表視圖工作,但我似乎無法得到一個數組來動態填充和創建#X行數...

讓我知道,如果我可以提供任何更多的信息。我試着要儘可能簡單 - 只需要得到一個TableView中工作,並與數組:)

編輯填充 - 這裏是我的project source code你可以下載到檢查出我在哪裏。

+0

你有你的tableview類的示例代碼?使它成爲UITableViewController的一個子類很容易。請包括頭文件和實現文件。 – chourobin 2012-01-04 00:33:11

+0

@chourobin肯定的事情,只是將我的xcode項目源文件附加到我的原始文章。 – Jake 2012-01-04 00:44:46

+0

@JakeRocheleau - 只是好奇,爲什麼你想讓你的Storyboard儘可能的苗條?我的印象是,界面構建器等Storyboarding允許您通過圖形處理來減輕代碼的負擔,並防止由於API更改而導致將來的錯誤。 – 5StringRyan 2012-01-04 00:56:01

回答

3

崩潰的是,在故事板,你必須改變的tableview動態原型的,而不是靜止細胞的原因。 由於某些原因,靜態單元是默認設置。一旦你掌握了故事板,這非常棒,尤其是在處理桌面視圖時。您的初始視圖設置爲NavigationController,其中您的MasterviewController作爲RootViewController,因此它將作爲firstView加載。單擊MainStoryboard中的TableView並將Cels更改爲動態原型,或者它將使用您在故事板中創建的靜態對象。您可以在故事板的桌面視圖上直接製作自定義單元格。還有一點需要注意的是,重複使用標識符必須在故事板和TableViewController中設置爲相同的名稱。 如果您知道它始終是相同的,您也可以將靜態單元格的數量增加到所需的數量。

+1

由於某些原因,靜態單元是默認設置。一旦你掌握了故事板,這非常棒,尤其是在處理桌面視圖時。 – 2012-01-04 04:49:56

+0

男人非常感謝你!這個問題老老實實讓我感到灰心。我幾個星期都弄不明白,現在我終於能夠繼續我的項目。你能解釋一下'重用標識符'是什麼,我應該在Storyboard中設置這個值? – Jake 2012-01-04 23:21:58

+0

爲什麼默認是靜態的超越了我。大多數的表格都是動態原型。 – 2012-01-04 23:57:06

3

下面是一個簡單的示例,用我的示例代碼中的NSArray(NSMutableArray)填充UITableViewController的子類。它不使用故事板,但你說在評論中沒問題。希望我的示例代碼可以幫助你。

頁眉:

@interface MainTableViewController : UITableViewController 
{ 
    NSMutableArray *_items; 
} 

@end 

實現:

@implementation MainTableViewController 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
#pragma mark - 
#pragma mark Lifetime 
#pragma mark - 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) 
    { 
     // datastore 
     _items = [[NSMutableArray alloc] init]; 
     for (int index=0; index < 5; index++) 
     { 
      [_items addObject:[NSString stringWithFormat:@"item #%d", index]];    
     } 
    } 
    return self; 
} 

- (void)dealloc 
{ 
    [_items release]; 
    [super dealloc]; 
} 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
#pragma mark - 
#pragma mark Table View DataSource 
#pragma mark - 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    // a typical table has one section 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // number of rows 
    return [_items count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // NSIndexPath contains an array of indexes. For UITableView: 
    // indexAtPosition:0 is the section number 
    // indexAtPosition:1 is the row number 

    // create an identifier for this type of cell 
    static NSString *CellIdentifier = @"Cell"; 

    // get a cell of this type from the re-use queue or create one 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    // Configure the cell... 
    NSString *title = [_items objectAtIndex:[indexPath indexAtPosition:1]]; 
    [[cell textLabel] setText:title]; 
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; 

    return cell; 
} 


// Override to support conditional editing of the table view. 
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return YES; 
} 


// Override to support editing the table view. 
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
     // Delete the row from the data source 
     NSLog(@"delete section: %d rol: %d", [indexPath indexAtPosition:0], [indexPath indexAtPosition:1]); 
     [_items removeObjectAtIndex:[indexPath indexAtPosition:1]]; 
     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
    else if (editingStyle == UITableViewCellEditingStyleInsert) 
    { 
     // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view 
     NSLog(@"insert section: %d rol: %d", [indexPath indexAtPosition:0], [indexPath indexAtPosition:1]);   
    } 
} 

// Override to support rearranging the table view. 
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath 
{ 
    NSString *fromItem = [_items objectAtIndex:[fromIndexPath indexAtPosition:1]]; 
    [_items removeObjectAtIndex:[fromIndexPath indexAtPosition:1]]; 
    [_items insertObject:fromItem atIndex:[toIndexPath indexAtPosition:1]]; 
} 

// Override to support conditional rearranging of the table view. 
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return YES; 
} 

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 
} 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
#pragma mark - 
#pragma mark UITableViewDelegate 
#pragma mark - 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"selected section: %d rol: %d", [indexPath indexAtPosition:0], [indexPath indexAtPosition:1]); 

    // get the selected cell 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; 

    // navigate to detail 
    DetailedTableViewController *detailedView = [[DetailedTableViewController alloc] init]; 
    [[self navigationController] pushViewController:detailedView animated:YES]; 
} 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
#pragma mark - 
#pragma mark View lifecycle 
#pragma mark - 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

- (void)didReceiveMemoryWarning 
{ 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // 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] setRightBarButtonItem: [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); 
} 

@end 
相關問題