1

UITableViewのコーディング方法を学習しようとしていますが、セクションのプログラミングに問題があります。

文字列を含む3つの配列と、3つの配列を含む1つの配列を宣言しました。

firstSection = [NSArray arrayWithObjects:@"Red", @"Blue", nil];
secondSection = [NSArray arrayWithObjects:@"Orange", @"Green", @"Purple", nil];
thirdSection = [NSArray arrayWithObject:@"Yellow"];

array = [[NSMutableArray alloc] initWithObjects:firstSection, secondSection, thirdSection, nil];

ヘッダーを表示するには

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{

NSString * title;
title = [NSString stringWithFormat:@"%@" , [array objectAtIndex:section]];

return title;
}

配列自体をヘッダーとして表示します

ここに画像の説明を入力してください

したがって、firstSectionやsecondSectionなどの配列の名前を使用して、実際にセクションの名前を表示することは可能ですか?

4

2 に答える 2

6

あなたの場合、配列をに格納することをお勧めしますNSDictionary。たとえば、呼び出された変数と呼び出された変数を宣言して合成すると 、NSDictionary次のようになります。tableContentsNSArraytitleOfSections

 - (void)viewDidLoad {
    [super viewDidLoad];

    //These will automatically be released. You won't be needing them anymore (You'll be accessing your data through the NSDictionary variable)
    NSArray *firstSection = [NSArray arrayWithObjects:@"Red", @"Blue", nil];
    NSArray *secondSection = [NSArray arrayWithObjects:@"Orange", @"Green", @"Purple", nil];
    NSArray *thirdSection = [NSArray arrayWithObject:@"Yellow"];

    //These are the names that will appear in the section header
    self.titleOfSections = [NSArray arrayWithObjects:@"Name of your first section",@"Name of your second section",@"Name of your third section", nil];

    NSDictionary *temporaryDictionary = [[NSDictionary alloc]initWithObjectsAndKeys:firstSection,@"0",secondSection,@"1",thirdSection,@"2",nil];
    self.tableContents = temporaryDictionary;
    [temporaryDictionary release];
}

次に、テーブルビューコントローラのメソッドで:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return [self.titleOfSections count];
}
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section {
    return [[self.tableContents objectForKey:[NSString stringWithFormat:@"%d",section]] count];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    //Setting the name of your section
    return [self.titleOfSections objectAtIndex:section]; 
}

次に、cellForRowAtIndexPathメソッドの各配列の内容にアクセスするには、次のようにします。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";

    NSArray *arrayForCurrentSection = [self.tableContents objectForKey:[NSString stringWithFormat:@"%d",indexPath.section]];

    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] 
                 initWithStyle:UITableViewCellStyleSubtitle 
                 reuseIdentifier:SimpleTableIdentifier] autorelease];
    }
    cell.textLabel.text = [arrayForCurrentSection objectAtIndex:indexPath.row];

    return cell;
}
于 2012-04-14T18:16:54.447 に答える
0

あなたはこのようにすることができます

  NSArray   *SectionArray = [[NSArray alloc]initwithArray:[array objectAtIndex:section]];

  NSString * title;

  title = [NSString stringWithFormat:@"%@" , [SectionArray objectAtIndex:section]];

   return title;
于 2012-04-14T17:13:54.527 に答える